确定已终止进程的pid

Hri*_*sto 7 c signals waitpid

我想弄清楚发送SIGCHLD信号的进程的pid是什么,我想在我为SIGCHLD创建的信号处理程序中这样做.我该怎么做?我尝试着:

int pid = waitpid(-1, NULL, WNOHANG);
Run Code Online (Sandbox Code Playgroud)

因为我想等待产生的任何子进程.

Jon*_*ler 8

如果您使用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,如果你不关心孩子的退出状态.