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