SIGCHLD信号处理

时间:2012-03-23 20:18:37

标签: c linux unix signals sigchld

在Unix中,当后台的子进程终止时,它会向父进程发送SIGCHLD信号,通知它已终止。

即使进程处于前台,是否会发生同样的情况?如果是这样,这意味着父母将忽略它。

这是对的吗?或者如果它在前台,那么根本不会发送任何信号?

2 个答案:

答案 0 :(得分:14)

后台和前台是作业控制概念,是shell的一部分。它们应用于进程,不会影响生成(执行)另一个进程的进程。

子进程是fork() - exec()调用的结果。子进程获取执行fork()调用的进程的父pid。这是SIGCHLD信号的上下文,父pid接收SIGCHLD信号。子进程是“前台”还是“后台”并不重要,只有ppid在退出流程时才有意义。

答案 1 :(得分:3)

没有 foreground child这样的东西。术语后台进程用于简单地引用我们主要处理父进程(可能创建子进程来完成其工作的一部分) 。子进程退出时SIGCHLD始终发送到父进程。但是,父进程通常会忽略它。如果父母要处理孩子的退出或者只在孩子退出后做一些动作,那么它可以使用wait()系统调用来获取子进程的状态。