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