我在一个生成许多子进程的进程中有一个 SIGCHLD
处理程序。
此代码位于我的处理程序内,并且 pid
始终为 1
。我读到pid
应该是子进程id
。为什么我总是返回1
?
int status;
pid_t pid;
while(pid = waitpid(-1, &status, WNOHANG) > 0)
{
if (WIFEXITED(status))
printf("Child %ld: Ended properly and returned %d\n", pid, WEXITSTATUS(status));
else
printf("Child crashed\n");
}
初始化处理程序的代码。
void initSIGCHLDSignalHandler()
{
struct sigaction act;
memset(&act,'\0',sizeof(struct sigaction));
sigemptyset(&act.sa_mask);
act.sa_flags = SA_NOCLDSTOP | SA_RESTART;
act.sa_handler = SIGCHLD_SignalHandler;
sigaction(SIGCHLD, &act, NULL);
}
最佳答案
我想你想要
while((pid = waitpid(-1, &status, WNOHANG)) > 0)
因为现在你得到的都是“真实的”。 (您的编译器可能会对此发出警告,因此请阅读编译器警告。)
关于c - 为什么 waitpid() 对所有子进程只返回 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666554/