为什么子进程结束的时候父进程没有收到SIGCHLD?
如下的小程序
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<signal.h>
void f(int sno){
printf("%d\n");
}
int main(void){
signal(SIGCHLD,f);
pid_t pid=fork();
if(pid==0)//child
{
printf("child,parant=%d\n",getppid());
}else{//parent
printf("me=%d,child=%d\n",getpid(),pid);
}
return 0;
}
执行的结果是:
# g++ sc.cpp && ./a.out
me=16212,child=16213
child,parant=16212
看起来我的signal函数注册的f函数,并没有执行啊。不是说子进程退出的时候父进程就会收到SIGCHLD么?
------解决方案--------------------那是因为父进程已经推出了。
设置父进程睡眠1s钟,就可以看到我们期待的结果了:
[code]
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<signal.h>
void f(int sno){
printf("%d\n",sno);
}
int main(void){
signal(SIGCHLD,f);
pid_t pid=fork();
if(pid==0)//child
{
printf("child,parant=%d\n",getppid());
}else{//parent
printf("me=%d,child=%d\n",getpid(),pid);
sleep(1); // -- ????o2è??é???????asleep?????????é??é¢???o??°??¨????o2????ˉ??-??-?é????o?o????
}
return 0;
}
[/code]