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