关于进程的问题。
下面的代码在按下Ctrl+C之后,为什么只有一个结果输出呢, 就是Parent那个。
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
int flag;
void intrrupt(){
flag = 0;
}
void w(){
while(flag != 0);
}
int main(){
int pid1, pid2;
pid1 = fork();
if(pid1 > 0){ /* Parent Process */
pid2 = fork();
if(pid2 > 0){ /* Parent Process */
flag = 1;
signal(SIGINT, intrrupt);
w();
kill(pid1, 16);
kill(pid2, 17);
wait(0);
wait(0);
printf("\nParent Process Is Killed!\n");
exit(0);
}else{ /* Child Process */
flag = 1;
signal(17, intrrupt);
w();
printf("\nChild Process 2 Is Killed By Parent!\n");
exit(0);
}
}else{ /* Child Process */
flag = 1;
signal(16, intrrupt);
w();
printf("\nChild Process 1 Is Killed By Parent!\n");
exit(0);
}
return 1;
}
应该是在两个子进程结束之后,也就是输出Child之后,才会有父进程的结束啊。
问题点数:20、回复次数:2Top
1 楼zez(思恩 闭关练功ing...)回复于 2006-07-01 15:31:33 得分 0
没仔细看你的程序.
只是提示一下..
子进程是单独的进程,其和主进程并行运行..
哪个先执行完 是未知的!!!Top
2 楼leeight(睡醒了!)回复于 2006-07-01 16:17:54 得分 0
但是将这两句
“signal(SIGINT, intrrupt);w(); ”
换成sleep(5), 就和预期的符合了,为什么呢》Top




