在研究了 python 守护进程之后,这个遍历似乎是最强大的:http: //www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
现在我正在尝试在我认为正在工作的守护程序类中实现一个工作池(我没有彻底测试过代码),除了在关闭时我得到一个僵尸进程。我已经读过我需要等待孩子的返回码,但我还不能确切地看到我需要如何做到这一点。
以下是一些代码片段:
def stop(self):
...
try:
while 1:
self.pool.close()
self.pool.join()
os.kill(pid, SIGTERM)
time.sleep(0.1)
...
在这里,我尝试os.killpg
了多种os.wait
方法,但没有任何改进。我也玩过closing
/joining
之前和之后的游泳池os.kill
。就目前而言,这个循环永远不会结束,一旦它到达os.kill
我就会得到一个僵尸进程。self.pool = Pool(processes=4)
发生在__init__
守护进程的部分。从run(self)
哪个被执行之后start(self)
,我会打电话self.pool.apply_async(self.runCmd, [cmd, 10], callback=self.logOutput)
。但是,我想在研究之前解决这个僵尸进程。
如何正确实现守护进程内的池以避免这个僵尸进程?