确定已终止进程的pid

时间:2010-04-07 20:02:31

标签: c signals waitpid

我正在试图找出发送SIGCHLD信号的进程的pid是什么,我想在我为SIGCHLD创建的信号处理程序中执行此操作。我该怎么做?我在尝试:

int pid = waitpid(-1, NULL, WNOHANG);

因为我想等待生成的任何子进程。

1 个答案:

答案 0 :(得分: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
    }
}

如果您不关心孩子的退出状态,可以将&status替换为NULL