[英]Which child process send SIGCHLD
我正在嘗試了解信號處理和過程。 我有一個創建多個子進程的父進程。 現在,在父進程中,我具有所有子進程的列表。 當孩子終止時,我想從列表中刪除它。 我知道,當孩子被解雇時,他正在將SIGCHLD
發送給父母。 好吧,現在這是棘手的部分,我如何才能知道那個孩子是被解雇還是剛剛被停職?
如你所說
當孩子被解雇時,他正在將SIGCHLD發送給父母
使父級調用wait()
。
要么
wait()
或 SIGCHLD
的信號處理程序,依次調用wait()
。 如果使用選項WUNTRACED
調用了pid值為-1
waitpid()
,然后將WIFSTOPPED
宏WIFSTOPPED
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())。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.