4

pipe() を使用すると、親プロセスと子プロセスのみが通信できるという制限があるのはなぜですか?無関係のプロセスではないのはなぜですか? プロセスの 2 つの子プロセスがパイプ () を使用して通信できないのはなぜですか?

4

2 に答える 2

2

そのような制限はありません。パイプの両端への参照を取得する手段を持つ任意の 2 つのプロセスが通信できます。プロセスは、パイプを使用してそれ自体と通信することもできます。

どのプロセスも、プロセス間でファイル記述子を通信する次の一般的な手段のいずれかを使用して、パイプの終端の 1 つへの参照を取得できます。この点で、パイプは特別なものではありません。

  • プロセス自体pipe()が、両端のファイル記述子を呼び出して取得しました。
  • SCM_RIGHTSプロセスは、ソケットを介して補助データとしてファイル記述子を受け取りました。
  • /proc/<pid>/fdプロセスは、 Linuxのようなプラットフォーム固有の手段を使用して、別の任意のプロセスからファイル記述子を取得しました。
  • (他の方法もあるかもしれません。)
  • プロセスは、前述の方法のいずれかを使用してファイル記述子を取得した祖先 (直接または間接) からファイル記述子を継承しました。
于 2013-04-26T19:12:00.397 に答える