exec関数系列の1つを使用して子プロセスを開くと、親プロセスのパイプは子プロセスに適用されますか?

exec関数系列の1つを使用して子プロセスを開くと、親プロセスのパイプは子プロセスに適用されますか?

ロギングのためにファイルに標準出力を割り当てる基本プロセスを持つ親プロセスを開くとします。

次に、execvp(または他のexec系関数)を介して子プロセスを開くために親プロセスを使用するとします。

文書によると、子プロセスは親プロセスのプロセスIDを保持します。

主な問題:これは、子プロセスが親プロセスのパイプ(特にstdoutとstderr)を継承するという意味ですか?

ベストアンサー1

文書化された回答を得るには、exec関数呼び出し系列のシステム呼び出しに関するマニュアルページを見てください。実装する:

デフォルトでは、ファイル記述子はexecve()中に開かれています。 close-on-execとマークされたファイル記述子については、FD_CLOEXECの説明を参照してください。FCNTL(2)

したがって、プロセスがパイプのファイル記述子に close-on-exec フラグを設定しない場合、実行後も開いたままになります。

おすすめ記事