我写了一个python守护进程。在我停止它后,我在内存中看到它的子进程仍然存在并且父进程为pid = 1。如何在停止守护进程时杀死这些子进程?
答案 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)