私はこのようないくつかの質問を見ましたが、子供が生きて子供のプロセスを終了しているかどうかを確認する様々なバリエーションを試した後、私は問題を単純化し、それでも動作しません。Pythonフォークされたプロセスは死ぬことはありません
私はsys.exit(0)でforkしたプロセスを終了するのに間違っていますか? それを殺す別の方法がありますか?問題は、親がプロセスを終了させることはできません。なぜなら、プロセスが終了した時点を知らないからです。
私は、システムコマンドを実行する前に(Python run system command and then exit... won't exit)実行していたと思っていましたが、特定の解決策が機能しなかったため、単純化されたバージョンでもそれを削除しました。
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
しかし、子プロセスが死んでなければなりません
は、ここでの例です。
この場合、これらのプロセスがゾンビになる原因は何ですか?
ありがとうございました。これは動作しますが、ロジックを追加する必要がありますが、それは問題ありません。 – JayLev