0

我写了一个python守护进程。在我停止它之后,我在内存中看到它的子进程仍然存在并且有 pid=1 的父进程。在停止守护进程时我应该怎么做才能杀死这些子进程?

4

2 回答 2

2

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

于 2012-08-15T00:08:10.853 回答
1

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

父 id 设置为 1 => init 进程,因为父进程已经死亡并使子进程成为孤儿。

为此的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)

于 2012-08-14T23:36:32.933 回答