繁体   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