在 Unix 中,当后台的子进程终止时,它会向SIGCHLD
父进程发送一个信号,通知它它已终止。
即使进程在前台也会发生同样的情况吗?如果是这样,这意味着父母将忽略它。
这是正确的吗?或者如果它在前台,那么根本没有信号发送?
background 和foreground 是作业控制的概念,并且是shell 的一部分。它们应用于进程并且不影响哪个进程产生(执行)另一个进程。
子进程是 fork()-exec() 调用的结果。子进程获得执行 fork() 调用的进程的父 pid。这是 SIGCHLD 信号的上下文,父 pid 接收 SIGCHLD 信号。子进程是“前台”还是“后台”都没有关系,只有 ppid 在进程退出时很重要。
没有前景孩子这样的东西。术语后台进程用于简单地指我们主要处理父进程(它可能创建一个子进程来完成它的一部分工作)。当子进程退出时SIGCHLD
,总是发送给父进程。但是,父进程通常会忽略它。如果父进程想处理子进程的退出或者只有在子进程退出后才做一些动作,那么它可以使用wait()系统调用来获取子进程的状态。