後に子プロセスを終了するために呼び出す正しい関数はどれos.fork()
ですか?
os._exit()
州のドキュメント:
終了する標準的な方法は
sys.exit(n)
です。
_exit()
通常、。の後の子プロセスでのみ使用する必要がありますfork()
。
を使用して子プロセスを終了できるかどうかはわかりませんsys.exit()
。それで:
- それは...ですか?
- そうすることの潜在的な副作用はありますか?
UNIXの方法は、あなたがaの子である場合、_exitfork
を呼び出すことです。exitとexitの主な違いは、より整理されていることです。ハンドラーの呼び出しやフラッシュなどが行われますが、ユーザースペースでは最小限の処理が行われ、カーネルにすべてのファイルを閉じるだけです。_exit
exit
atexit
stdio
_exit
これは、Pythonインタープリターのシャットダウンを実行し、可能な限り最小限の処理をsys.exit
実行することで、Pythonの世界に直接変換されます。exit
os._exit
あなたがの子であり、その代わりfork
に呼び出す場合は、終了ハンドラーを呼び出すことになり、親が終了したときに再び呼び出して、未定義の動作を引き起こす可能性があります。exit
_exit
os._exit(n)
あなたが引用しなかったドキュメントの一部は
クリーンアップハンドラーを呼び出したり、stdioバッファーをフラッシュしたりせずに、ステータスnでプロセスを終了します。
したがって、私がこれをどのように読んでいるかは、os._exit()
ファイルハンドラーを共有している限り使用する必要があります(別のプロセスによってclose()され、自分でバッファーをフラッシュするようにします(自分の場合は重要です)。 (「ファイル」のように)共有リソースがなければ、それは問題ではありません。
したがって、子プロセスが計算専用であり、生データ(リソースハンドラーではない)が供給される場合は、を使用しても安全exit()
です。