vforkまたはフォークの子プロセスがなぜシャットダウン()の代わりに_exit()を呼び出すのですか?

vforkまたはフォークの子プロセスがなぜシャットダウン()の代わりに_exit()を呼び出すのですか?

マニュアルページからvfork()

vfork() は、子プロセスが execve(2) または _exit(2) を呼び出すまで親プロセスが一時停止されるという点で fork() とは異なります。子プロセスは、execve()を実行するまでスタックを含む親プロセスとすべてのメモリを共有します。子プロセスは現在の関数から返すか、exit()を呼び出すべきではありませんが、_exit()を呼び出すことはできます。

_exit()なぜ子供たちは単にcallの代わりにanを使うべきですかexit()?この機能がvfork()で動作することを願っていますfork()

ベストアンサー1

〜のように早く会いました。vfork子プロセスが親プロセスのメモリにアクセスすることを許可しません。exitCライブラリ関数です(だからよく使うのようにexit(3))。 Cストリームのフラッシュとクローズ(で宣言された関数を介してファイルを開くstdio.h)、に登録されているカスタム関数の実行など、さまざまなクリーンアップ操作を実行しますatexit。これらの操作にはすべてプロセスメモリへの読み書きが含まれます。

_exitクリーンアップせずに終了します。これは直接的なシステムコール(それで作成された_exit(2))であり、通常はシステムコール番号をプロセッサレジスタに入れ、特定のプロセッサ命令を実行(システムコールハンドラに分岐)することによって実装されます。これはプロセスメモリにアクセスする必要がないため、後で実行しても安全ですvfork

その後、forkそのような制限はありません。これで、親プロセスと子プロセスが完全に自律的になります。

おすすめ記事