子进程可以在没有父进程死亡的情况下吗?

杀 – 它会立即杀死这个过程吗?

我找到了答案,并为SIGCHLD设置了一个信号处理程序,并在该处理程序中引入了wait 。 这样,每当父进程终止子进程时,就会调用此处理程序并调用wait获取子进程。 – 动机是清除进程表条目。

即使没有父进程死亡,我仍然会看到一些子进程持续几秒钟。 – 这怎么可能?

我通过ps看到这个。 准确地说ps -o user,pid,ppid,command -ax和greping for parent进程,子进程和defunct。

一个过程在退出时立即停止(僵尸)(从信号,呼叫exit ,从main返回,等等)。 在父母wait之前,它会保持僵尸状态。

因此,所有进程在退出时至少会短暂成为僵尸。

如果父进程需要一点(因为它正在做其他工作,或者只是因为调度程序还没有给它CPU时间),那么在调用wait之前,你会看到僵尸。 如果父节点从不调用wait ,那么当它最终退出时, init (pid 1)将采用其僵尸子节点,并对它们进行调用wait

只有在父进程尚未死亡且尚未等待的情况下,子进程才会失效(变成僵尸)。 如果原始父级死亡,则子级的父级将成为进程ID 1,该进程的主要任务是等待其(inheritance的)子级死亡并将其从进程列表中删除,以便它们不是僵尸。 (注意:孤立的子节点或守护进程由PID 1自动inheritance;它不会被分配给进程层次结构中的祖父母或曾祖父母。)

在孩子死亡和父母通过wait() (或waitpid() ,或者waitid()或任何其他变种)收集退出信息的时间之间,它是进程列表中的一个僵尸,显示为ps

但要回答你的问题标题:

  • 是的,如果没有父母的死亡,这个过程就会失效。

(如果其父母没有去世,它只会失效。)