在这篇文章中,我提到了关于如何异步结束僵尸进程的问题。
其中的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]