|
谢谢。麻烦帮我看一下以下的程序那里错了:
我觉得好像那个signal()的函数没有发挥作用的样子。不明白的
编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让
父进程捕捉键盘上来的中断信号(即按Del键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:
child process 1 is killed by parent!
child process 2 is killed by parent!
父进程等待两个子进程终止后,输出以下信息后终止:
parent process is killed !
程序如下:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void waiting() ,stop();
int wait_mark;
main()
{
int p1,p2;
while((p1=fork())==-1);
if(p1>0)
{
while((p2=fork())==-1);
if(p2>0)
{
wait_mark=1;
signal(SIGINT,stop); /*接收'Del'信号,并转stop*/
waiting();
kill(p1,16);
kill(p2,17);
wait(0);
wait(0);
printf("parent process is killed !\n");
exit(0);
}
else
{
wait_mark=1;
signal(17,stop);
waiting();
lockf(1,1,0);
printf("child process 2 is killed by parent!\n");
lockf(1,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop);
waiting();
lockf(1,1,0);
printf("child process 1 is killed by parent!\n");
lockf(1,0,0);
exit(0);
}
}
void waiting()
{
while(wait_mark!=0);
}
void stop ()
{
wait_mark=0;
} |
|