私は次のようなことを実行してみました:
subprocess.Popen(['nohup', 'my_command'],
stdout=open('/dev/null', 'w'),
stderr=open('logfile.log', 'a'))
これは、親スクリプトが正常に終了する場合は機能しますが、スクリプトを強制終了すると (Ctrl-C)、すべての子プロセスも強制終了されます。これを回避する方法はありますか?
私が注目しているプラットフォームはOS XとLinuxで、Python 2.6を使用しています。そしてPython 2.7。
ベストアンサー1
子プロセスは親プロセスと同じプロセス グループに属しているため、同じものを受け取ります。子プロセスをSIGINT
呼び出すことで、子を独自のプロセス グループに置くことができます。の引数はここで役立ちます。os.setpgrp()
Popen
preexec_fn
subprocess.Popen(['nohup', 'my_command'],
stdout=open('/dev/null', 'w'),
stderr=open('logfile.log', 'a'),
preexec_fn=os.setpgrp
)
(preexec_fn
は un*x-oid 専用です。Windows にはほぼ同等の " creationflags=CREATE_NEW_PROCESS_GROUP
" があるようですが、試したことはありません。)