SIGCHLD信号处理

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

即使进程处于前台,也会发生同样的情况吗? 如果是这样,这意味着家长会忽略它。

这是正确的吗? 或者如果它在前景,那么根本没有信号发送?

背景和前景是作业控制的概念,并且是shell的一部分。 它们适用于进程,不影响哪个进程产生(执行)另一个进程。

子进程是fork() – exec()调用的结果。 孩子获得执行fork()调用的进程的父进程pid。 这是SIGCHLD信号的上下文,父pid收到SIGCHLD信号。 子进程是“前台”还是“后台”并不重要,在进程退出时只有ppid很重要。

没有前景的孩子这样的事情 术语“后台进程”用于简单地表示我们主要处理父进程(可能创建子进程来完成其工作)。 当一个子进程退出时, SIGCHLD总是被发送给父进程。 但是,父进程通常忽略它。 如果父母想要处理孩子的退出或者在孩子退出之后做一些动作,那么可以使用wait()系统调用来获得子进程的状态。