我想弄清楚发送SIGCHLD信号的进程的pid是什么,我想在我为SIGCHLD创建的信号处理程序中这样做.我该怎么做?我尝试着:
int pid = waitpid(-1, NULL, WNOHANG);
Run Code Online (Sandbox Code Playgroud)
因为我想等待产生的任何子进程.
如果您使用waitpid()更多或更少,如图所示,您将被告知其中一个已经死亡的子进程的PID - 通常这将是唯一已经死亡的进程,但是如果你得到它们的一大堆,你可能会得到一个信号和许多尸体收集.所以,使用:
void sigchld_handler(int signum)
{
pid_t pid;
int status;
while ((pid = waitpid(-1, &status, WNOHANG)) != -1)
{
unregister_child(pid, status); // Or whatever you need to do with the PID
}
}
Run Code Online (Sandbox Code Playgroud)
您可以替换&status使用NULL,如果你不关心孩子的退出状态.