#include <stdio.h>
#include <signal.h>
#include <unistd.h>
int wait_mark;
void waiting( ),stop( );
main ( ){
int p1,p2;
while ((p1=fork())-1);
if (p1>0) { /主进程的处理/
while ((p2=fork())-1);
if (p2>0) { /主进程的处理/
wait_mark=1;
signal(SIGINT,stop);/预设对SIGINT信号的处理过程/
waiting();/等待接收ctrl+c信号/
kill(p1,16);/向p1发出信号16/
kill(p2,17);/向p2发出信号17/
wait(0);/同步/
wait(0);
print(“parents is killed\n”); /可以增长这个输出,观察它的内容不会被打断/
exit(0);
}
else { /p2进程的处理/
wait_mark=1;
signal(17,stop); /预设对17信号的处理过程/
signal(2,1);/忽略ctrl+c/
waiting();/等待信号17/
lockf(stdout,1,0);/用上锁的方法实现互斥/
printf(“P2 is killed by parent\n”);
lockf(stdout,0,0);
exit(0);/P2正常结束/
}
}
else { /p1进程的处理/
wait_mark=1;
signal(16,stop);
signal(2,1);
waiting();/等待信号16/
lockf(stdout,1,0); /用上锁的方法实现互斥/
printf(“P1 is killed by parent\n”);
lockf(stdout,0,0);
exit(0); /P1正常结束/
}
}
void waiting()
{
while(wait_mark!=0);
}
void stop()
{
wait_mark=0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交