非正常的退出无法用WIFEXITED捕获到!

在这篇文章中,我提到了关于如何异步结束僵尸进程的问题

其中的handler如下写的:

[cpp]
void handler(int num) {
//我接受到了SIGCHLD的信号啦
int status;
int pid = waitpid(-1, &status, WNOHANG);
printf("In handler.\n");
if (WIFEXITED(status)) {
printf("The child %d exit with code %d\n", pid, WEXITSTATUS(status));
}
}
[/cpp]

现在发现一个问题,当子进程whil(1);的时候,我kill掉child,并不能打印出"The Child %d exit"这一行,而只是进入了In handler , 经过检查,原因是:
 
WIFEXITED : 只有程序正常结束(调用exit才返回true)
 
如果被kill的,需要这些:
 
WIFSIGNALED : 如果是被信号结束的,有这个信号
 
WTERMSIG : 可以返回哪个信号结束的
 
所以要这样写

在这篇文章中,我提到了关于如何异步结束僵尸进程的问题

其中的handler如下写的:

[cpp]
void handler(int num) {
//我接受到了SIGCHLD的信号啦
int status;
int pid = waitpid(-1, &status, WNOHANG);
printf("In handler.\n");
if (WIFEXITED(status) || WIFSIGNALED(status)) {
printf("The child %d exit with code %d\n", pid, WEXITSTATUS(status));
}
}
[/cpp]

Leave a Reply

Your email address will not be published.