编一个C程序,父进程首先设置信号SIGUSR1的处理方法和创建无名管道,再创建一个子进程,然后从键盘上读入一个命令串(如ls-l),并通过无名管道向子进程发送该命令串。之后再向子进程发送软中断信号SIGUSR1,父进程等待子进程终止。子进程读到命令后,睡眠

admin2016-05-12  21

问题 编一个C程序,父进程首先设置信号SIGUSR1的处理方法和创建无名管道,再创建一个子进程,然后从键盘上读入一个命令串(如ls-l),并通过无名管道向子进程发送该命令串。之后再向子进程发送软中断信号SIGUSR1,父进程等待子进程终止。子进程读到命令后,睡眠等待10秒,在收到软中断信号SIGUSR1后,在软中断处理程序中利用例行库中的程序执行,执行该命令串后返回。子进程然后打印Completed后终止自己。父进程在子进程完成任务和返回结果状态后结束运行。

选项

答案程序清单24-3:sig.c #include<signal.h> #include<string.h> #include<stdlib.h> #include<stdio.h> char cmd[100]; main() { int pid,status,chan[2]; void func(); signal(SIGUSR1,func); //设置信号处理方式 pipe(chan); //创建无名管道 if(pid=fork()){ close(chan[0]); printf("Canmand="); gets(cmd); write(chan[1],cmd,strlen(cmd)+1); close(chan[1]); sleep(5); kill(pid,SIGUSR1); wait(&status); //等待子进程终止 printf("status=%d\n",status); }else{ close(chan[1]); bzero(cmd,sizeof(cmd)); read(chan[0],cmd,sizeof(cmd)); Sleep(10); printf("Completed.\n"); exit(0); } } void func() { system(cmd); }。

解析
转载请注明原文地址:https://kaotiyun.com/show/zvNx777K
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)