5
我想弄清楚什麼是發送SIGCHLD信號的進程的pid,我想在我爲SIGCHLD創建的信號處理程序中執行此操作。我將如何做到這一點?我試圖:確定終止進程的PID
int pid = waitpid(-1, NULL, WNOHANG);
因爲我想等待產生的任何子進程。
我想弄清楚什麼是發送SIGCHLD信號的進程的pid,我想在我爲SIGCHLD創建的信號處理程序中執行此操作。我將如何做到這一點?我試圖:確定終止進程的PID
int pid = waitpid(-1, NULL, WNOHANG);
因爲我想等待產生的任何子進程。
如果您使用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
}
}
您可以NULL
取代&status
,如果你不關心孩子的退出狀態。
你的方法是正確的,它應該工作。你有什麼問題? – qrdl 2010-04-07 20:08:55
我如何獲得發送SIGCHLD的進程的pid? – Hristo 2010-04-07 20:09:30
'waitpid()'返回終止子的pid,如果你從你的信號處理程序調用它。 – qrdl 2010-04-07 20:14:07