簡體   English   中英

哪個子進程發送SIGCHLD

[英]Which child process send SIGCHLD

我正在嘗試了解信號處理和過程。 我有一個創建多個子進程的父進程。 現在,在父進程中,我具有所有子進程的列表。 當孩子終止時,我想從列表中刪除它。 我知道,當孩子被解雇時,他正在將SIGCHLD發送給父母。 好吧,現在這是棘手的部分,我如何才能知道那個孩子是被解雇還是剛剛被停職?

如你所說

當孩子被解雇時,他正在將SIGCHLD發送給父母

使父級調用wait()

要么

  • 通過阻塞調用wait()
  • 在連續的基礎上
  • 通過設置服務SIGCHLD的信號處理程序,依次調用wait()

如果使用選項WUNTRACED調用了pid值為-1 waitpid() ,然后將WIFSTOPPEDWIFSTOPPED waitpid()返回的值,它將告訴您該進程是停止還是結束。

對於從2.6.10內核版本開始的Linux,與WIFSTOPPED相同,適用於WCONTINUED

signal.h - sigaction()中有一個系統調用,類似於siganl(),但更有用。
訪問http://man7.org/linux/man-pages/man2/sigaction.2.html

sigaction()的信號處理程序函數原型如下所示:

void sa_handler(int signo, siginfo_t *si, void *ucontext);

它的參數類型為siginfo_t,其中包含有關信號的所有信息,包括發送信號的進程的pid。
盡管使用常規的信號處理機制,但是可以使用前面的答案中提到的waitid()來完成,但是waitid()需要使用pid作為其參數之一。

使用wait()函數系列的參數(waitpid(),waitid())。

http://linux.die.net/man/2/waitid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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