execve() は子プロセスを親プロセスとは独立して作成しますか?

execve() は子プロセスを親プロセスとは独立して作成しますか?

プロセスが子プロセスを分岐()すると、2つのプロセスが関連付けられます。子プロセスは、パイプや匿名メモリマップなどの一部のIPCオブジェクトを含む、親プロセスから多くを継承します。

子プロセスexecve()が実行可能ファイルの場合、親プロセスと子プロセスは関係ありませんか?そのプロセスにのみ適用されるものはもう有効ではありませんか?

たとえば、次の文は正しいですか?

  • シェルプロセスは実行可能ファイルをexecve()するために子プロセスをfork()しますか?

  • シェルプロセスとそのサブプロセスは、そのプロセスのIPCメカニズムを介してのみ通信できますか?

ありがとうございます。

ベストアンサー1

execve()メモリを完全に交換してください。

開いたままになるようにマークされていないファイルハンドルを閉じます。 (通常、STDIN、STDOUT、およびSTDERRはこのように表示されます。)フラグを参照してくださいO_CLOEXEC。 (より正確に言えば、クローズとしてマークされたファイル記述子を閉じます。)

シグナルハンドラをリセットしますが、SIG_IGNとSIG_DFLは変更されません。

上位/下位関係や制御端末は変更されません。

SysV IPCオブジェクトについてはわかりませんが、最初から特定のプロセスメモリに存在するとは思いません。

おすすめ記事