都是自己写代码的粗心造成的,留个纪念!
#include
#include
#include
#include
int doit(int);
int main(void)
{
while (1){
int reval =0;
int pid;
pid = fork();
switch (pid){
case -1 :
printf("\nfork is error\n");
break;
case 0 :
printf("\nin child process id %d\n",getpid());
sleep(2);
exit (1); // 当时忘了终止 子进程! 所以悲剧了!!
break;
default :
break;
}
printf("\n%d\n",reval);
signal(SIGCHLD,doit);
sleep(10);
printf("\ntest\n");
}
}
int doit(int sig){
if (sig ==SIGCHLD)
printf("\n---------doit---------\n");
else printf("\n!!!!!!!!!!!\n");
return 0;
}
1:
2: 如果 子进程 处理时间极短 , 父进程在没有 运行到 sleep ()的时候, 就接收了SIGCHILD 信号,
3:父进程 在运行sleep() 了, 接收到 SIGCHILD 信号! sleep()中断!
不知道还没有其他的理解, 有错误的帮我 指出来!!谢谢!
阅读(849) | 评论(0) | 转发(0) |