このようないくつかの質問を見てきましたが、子が生きているかどうかを確認し、子プロセスを終了するさまざまなバリエーションを試した後、問題を単純化しましたが、それでも機能しません。
sys.exit(0)でフォークされたプロセスを終了するのは間違っていますか?それを殺す別の方法はありますか?問題は、プロセスがいつ機能するかわからないため、親にプロセスを強制終了させることはできないということです。
最初は、終了する前にシステムコマンドを実行したためだと思いました(Pythonでシステムコマンドを実行してから終了します...終了しません)が、与えられたソリューションも機能しなかったため、簡略化されたバージョンではそれを削除しました。
次に例を示します。
import sys
import os
import time
children = []
for i in range(0,3):
pid = os.fork()
if pid == -1:
continue
elif pid == 0:
# Do work...
print 'Child %d spawned' % os.getpid()
sys.exit(0)
else:
children.append(pid)
time.sleep(5)
for pid in children:
proc_path = '/proc/%d' % pid
if not os.path.exists(proc_path):
print 'Child %d is dead' % pid
else:
print 'Child %d is alive' % pid
これは印刷します:
Child 27636 spawned
Child 27637 spawned
Child 27638 spawned
Child 27636 is alive
Child 27637 is alive
Child 27638 is alive
しかし、子プロセスは死んでいるはずです。
この場合、これらのプロセスがゾンビになる原因は何ですか?