代码:#include<stdio.h> #include<signal.h> #include<unistd.h> #include<stdlib.h> void waiting(),stop(); int wait_mark; main() { int p1,p2; signal(SIGINT,stop); while((p1=fork())== -1); if(p1>0) {① while((p2=fork())== -1); if(p2>0) {② wait_mark=1; waiting(0); kill(p1,10); kill(p2,12); wait(); wait(); printf("parent proces is killed!\n"); exit(0); } else { 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 { 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); } } void waiting() { while(wait_mark!=0); } void stop() { wait_mark=0; }。如果把signal(SIGINT, stop)放在程序中的①号和②号位置,结果会怎样?并分析原因。
时间: 2024-04-05 21:35:28 浏览: 17
#include<stdio.h>
如果将signal(SIGINT, stop)放在程序中的①号位置,那么当父进程收到中断信号(SIGINT)时,会执行stop函数,将wait_mark的值设为0,从而结束等待循环,但是子进程2并没有收到相应的信号,因此不会结束等待循环,导致程序陷入死循环。
如果将signal(SIGINT, stop)放在程序中的②号位置,那么当父进程收到中断信号(SIGINT)时,只会结束等待循环,但是子进程1和子进程2并没有收到相应的信号,因此它们仍然在等待循环中等待,导致程序陷入死循环。
因此,应该在程序的开头就设置中断信号处理函数,以保证所有进程都能正确地响应中断信号。
阅读全文