父进程停止后,子进程仍处于活动状态

时间:2012-08-14 23:31:35

标签: python

我写了一个python守护进程。在我停止它后,我在内存中看到它的子进程仍然存在并且父进程为pid = 1。如何在停止守护进程时杀死这些子进程?

2 个答案:

答案 0 :(得分:2)

如果您正在使用多处理库,则应在启动子进程之前将daemon标志设置为True。这将使父进退出时退出。

答案 1 :(得分:1)

我不知道等效的python调用,但在C中,接受的策略是在子pid上使用WNOHANG选项进行waitpid / wait(3)。

父ID设为1 =>父进程已经死亡并使子进程成为孤儿的初始进程。

这个c代码如下

#include <sys/wait.h>
/*
pid_t wait(int *stat_loc);
*/

void makeOrphanPidExit(pid_t pid)
{
   int stat_loc = 0;
   waitpid(pid, &stat_loc, WNOHANG);
}

调用makeOrphanPidExit(orphanPid)将使子进程脱离其孤独的恐惧! :)

有关等待(3)的文档 - http://linux.die.net/man/3/wait

更新:

根据http://docs.python.org/release/3.1.5/library/os.html#os.waitpid

,等效的python调用是`os.waitpid(pid,os.WNOHANG)