我正在试图找出发送SIGCHLD信号的进程的pid是什么,我想在我为SIGCHLD创建的信号处理程序中执行此操作。我该怎么做?我在尝试:
int pid = waitpid(-1, NULL, WNOHANG);
因为我想等待生成的任何子进程。
答案 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
。