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)
。ただし、それを調べる前に、このゾンビ プロセスに対処したいと思いました。
このゾンビプロセスを回避するために、デーモン内にプールを適切に実装するにはどうすればよいですか?