8

後に子プロセスを終了するために呼び出す正しい関数はどれos.fork()ですか?

os._exit() のドキュメント:

終了する標準的な方法はsys.exit(n)です。

_exit()通常、。の後の子プロセスでのみ使用する必要がありますfork()

を使用して子プロセスを終了できるかどうかはわかりませんsys.exit()。それで:

  1. それは...ですか?
  2. そうすることの潜在的な副作用はありますか?
4

2 に答える 2

9

UNIXの方法は、あなたがaの子である場合、_exitforkを呼び出すことです。exitとexitの主な違いは、より整理されていることです。ハンドラーの呼び出しやフラッシュなどが行われますが、ユーザースペースでは最小限の処理が行われ、カーネルにすべてのファイルを閉じるだけです。_exitexitatexitstdio_exit

これは、Pythonインタープリターのシャットダウンを実行し、可能な限り最小限の処理をsys.exit実行することで、Pythonの世界に直接変換されます。exitos._exit

あなたがの子であり、その代わりforkに呼び出す場合は、終了ハンドラーを呼び出すことになり、親が終了したときに再び呼び出して、未定義の動作を引き起こす可能性があります。exit_exit

于 2012-06-13T07:52:37.487 に答える
1

os._exit(n)あなたが引用しなかったドキュメントの一部は

クリーンアップハンドラーを呼び出したり、stdioバッファーをフラッシュしたりせずに、ステータスnでプロセスを終了します。

したがって、私がこれをどのように読んでいるかは、os._exit()ファイルハンドラーを共有している限り使用する必要があります(別のプロセスによってclose()され、自分でバッファーをフラッシュするようにします(自分の場合は重要です)。 (「ファイル」のように)共有リソースがなければ、それは問題ではありません。

したがって、子プロセスが計算専用であり、生データ(リソースハンドラーではない)が供給される場合は、を使用しても安全exit()です。

于 2012-06-13T07:11:18.040 に答える