LINUX C进程间通信问题
linux吧
全部回复
仅看楼主
level 9
wyl0706 楼主
预想中的情况是父进程通过发送16、17两个信号给子进程,然后子进程1、2结束,最后父进程结束。但实际输出的结果只有父进程结束,子进程结束没有输出,这是为什么?
代码如下:
结果如下:
2015年12月23日 08点12分 1
level 9
wyl0706 楼主
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
void waiting( ),stop( );
int wait_mark;
main( )
{
int p1,p2,stdout=1;
while((p1=fork())==-1); /*创建子进程p1*/
if (p1>0)
{
while((p2=fork())==-1); /*创建子进程p2*/
if(p2>0)
{
wait_mark=1;
signal(SIGINT,stop); /*接收到^c信号,转stop*/
waiting();
kill(p1,16); /*向p1发软中断信号16*/
kill(p2,17); /*向p2发软中断信号17*/
wait(0); /*同步*/
printf("Parent process is killed!\n");
exit(0);
}
else
{
wait_mark=1;
signal(17,stop); /*接收到软中断信号17,转stop*/
waiting();
printf("2:%d\n",wait_mark);
printf("Child process 2 is killed by parent!\n");
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop); /*接收到软中断信号16,转stop*/
waiting();
printf("3:%d\n",wait_mark);
printf("Child process 1 is killed by parent!\n");
exit(0);
}
}
void waiting( )
{
while(wait_mark!=0);
}
void stop( )
{
wait_mark=0;
}
2015年12月23日 08点12分 2
1