kill - does it kill the process right away?
我找到了答案,并为SIGCHLD
设置了一个信号处理程序,并在该处理程序中引入了wait
。这样,只要父进程kill
是子进程,就会调用此处理程序并调用wait
来收割子进程。 - 动机是清除流程表条目。
即使没有父进程死亡,我仍然会看到一些子进程持续几秒钟。 - 这怎么可能?
我通过ps
看到了这一点。准确ps -o user,pid,ppid,command -ax
并为父进程,子进程和已解散而烦恼。
答案 0 :(得分:6)
进程在退出后立即停止(僵尸)(从信号,呼叫exit
,从main
返回,无论如何)。它会保持僵尸状态,直到其父母wait
为止。
因此,所有进程在退出时至少会短暂成为僵尸。
如果父进程需要一点(因为它正在做其他工作,或者只是因为调度程序还没有给它CPU时间),那么在调用wait
之前,你会看到僵尸有点。如果父母从不致电wait
,那么当它最终退出时,init
(pid 1)将采用其僵尸儿童,并在其上调用wait
。
答案 1 :(得分:5)
子进程只有在其父进程没有死亡且尚未等待时才会失效(成为僵尸)。如果原始父母死亡,则孩子的父母成为进程ID 1,该进程的主要任务是等待其(继承的)子女死亡并将其从进程列表中删除,以便他们不是僵尸。 (注意:孤立的子节点或守护进程由PID 1自动继承;它不会被分配给进程层次结构中的祖父母或曾祖父母。)
在孩子死亡和父母通过wait()
(或waitpid()
,或waitid()
或任何其他变体)收集退出信息之间,它是一个僵尸流程列表,defunct
显示为ps
。
但要回答你问题的标题:
(如果其父母没有去世,它只会失效。)