%20%E3%81%AF%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E8%A6%AA%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%A8%E3%81%AF%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%A6%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F.png)
プロセスが子プロセスを分岐()すると、2つのプロセスが関連付けられます。子プロセスは、パイプや匿名メモリマップなどの一部のIPCオブジェクトを含む、親プロセスから多くを継承します。
子プロセスexecve()が実行可能ファイルの場合、親プロセスと子プロセスは関係ありませんか?そのプロセスにのみ適用されるものはもう有効ではありませんか?
たとえば、次の文は正しいですか?
シェルプロセスは実行可能ファイルをexecve()するために子プロセスをfork()しますか?
シェルプロセスとそのサブプロセスは、そのプロセスのIPCメカニズムを介してのみ通信できますか?
ありがとうございます。
答え1
execve()
メモリを完全に交換してください。
開いたままになるようにマークされていないファイルハンドルを閉じます。 (通常、STDIN、STDOUT、およびSTDERRはこのように表示されます。)フラグを参照してくださいO_CLOEXEC
。 (より正確に言えば、クローズとしてマークされたファイル記述子を閉じます。)
シグナルハンドラをリセットしますが、SIG_IGNとSIG_DFLは変更されません。
上位/下位関係や制御端末は変更されません。
SysV IPCオブジェクトについてはわかりませんが、最初から特定のプロセスメモリに存在するとは思いません。