2017-04-21 5 views
0

複数のプロセスを実行するプログラムをC言語で作成し、親プロセスでstdinとstdoutのファイル記述子をdup()を使って他のFDに変更したとしましょう。シェル内でのプロセスの理解

私の質問は、変更が現在実行中のすべてのプロセスに表示されているのか、変更が加えられたプロセスだけに表示されているのでしょうか?

+1

'dup'を実行するプロセスと、その後に作成された後続の子プロセスのみが表示されます。 「親プロセスと通信するパイプを使用して、新しいプロセスでFDを設定する必要がありますか?」あなたが何を意味するのか分からない。それはあなたが全体的な目標を提供していないので、あなたが全体的にやろうとしていることと、その画像がはっきりしていないことに依存します。 – kaylum

+0

私の2番目の質問に気をつけてください – Fernando

+0

しかし、あなたは以下の答えに矛盾して答えます。あなたは言った "それはdupとそのdupの後に作成される任意のその後の子供を行うプロセスにのみ可視です"と述べた。下の答えは、 "親プロセスでstdin \ stdoutをリダイレクトすると、子プロセスには影響しません。" – Fernando

答えて

0

あなたはそれがリダイレクト前を作成した子プロセスには影響しませんプロセスでstdin\stdoutをリダイレクトする場合は、それだけでリダイレクト後を作成し、それらに影響を与えます。
スレッドの場合、は、あるスレッドがパイプを閉じると(同じプロセスに属しています)、いずれかがリダイレクトされた場合、すべてのスレッド(同じプロセスに属します)に影響します。

Process A 
. 
. 
Create Process B in process A 
. 
. 
Create Process C in process A 
. 
. 
Redirect stdout\stdin in process A 
. 
. 
. 
Create Process D in process A 

BおよびCは、プロセスAがリダイレクトすることによってそのstdout\stdinの影響を受けません。 プロセスDは、親と一緒にリダイレクトしたものと同じstdout\stdinを共有するようになりました。

関連する問題