该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有以下代码:
int main(void)
{
int p1, p2;
signal(SIGINT,stop);
while((p1=fork())= =-1);
if(p1>0) /* In Parent Process*/
{ /*(1) */
while((p2=fork())= =-1);
if(p2>0) /*in parent process*/
{ /* (2) */
wait_mark=1;
waiting(0);
kill(p1,10);
kill(p2,12);
wait( );
wait( );
printf(“parent process is killed!\n”);
exit(0);
} else{ /*In Child Process 2*/
wait_mark=1;
signal(12,stop);
waiting();
lockf(1,1,0); //加锁
printf(“child process 2 is killed by parent!\n”);
lockf(1,0,0); //解锁 exit(0);
}
}else{ /*In Child Process 1*/
wait_mark=1;
signal(10,stop);
waiting();
lockf(1,1,0);
printf(“child process 1 is killed by parent!\n”);
lockf(1,0,0);
exit(0);
}
return 0;
}
void waiting()
{
while(wait_mark!=0);
}
void stop()
{
wait_mark=0;
}
如果把signal(SIGINT,stop)放在(1)号和(2)号位置,结果会怎样?为什么?