我有一个处理程序,用于在一个生成许多孩子的进程中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 %dn", pid, WEXITSTATUS(status));
else
printf("Child crashedn");
}
用于初始化处理程序的代码。
void initSIGCHLDSignalHandler()
{
struct sigaction act;
memset(&act,' ',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)
因为现在你得到的只是"真实"。 (您的编译器可能会对此发出警告,因此请阅读编译器警告。