簡體   English   中英

c 中的 SIGCHLD 處理程序 - 不需要的等待

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM