[英]SIGCHLD handler in c - unwanted wait
我的 SIGCHLD 處理程序函數存在以下問題。
處理程序代碼非常簡單:
void sigchld_handler(int signum)
{
pid_t ended;
signal(SIGCHLD, sigchld_handler);
ended = wait(NULL);
// do some stuff with the PID of the finished child process
}
當我只分叉一個孩子時,這很有效。 如果我有 2 個孩子(或更多)並且其中一個已經完成運行,則 sigchld_handler() 開始,當它到達“ended = wait(NULL)”行時,程序會一直等到我擁有的另一個孩子完成。
有沒有辦法獲得剛剛以不同方式結束的孩子的PID並避免這種等待?
使用sigaction()代替,處理程序將具有以下簽名:
void (*sa_sigaction)(int, siginfo_t *, void *);
它在struct siginfo_t
傳遞了您想要的信息,來自手冊頁:
SIGCHLD 填寫si_pid 、 si_uid 、 si_status 、 si_utime 和 si_stime ,提供孩子的信息。 si_pid 字段是子進程ID
注意:當然,您仍然需要在子進程上使用wait()
,除非您使用SA_NOCLDWAIT
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.