プロセス交換の実装とプロセス交換の並行性の実装

プロセス交換の実装とプロセス交換の並行性の実装

Bashのマニュアルによると

/dev/fdプロセス置換は、名前付きパイプ(fifo)または名前付きファイルを開く方法をサポートするシステムでサポートされています。

  1. これは、プロセスの置き換えが名前付きパイプまたは下のファイルを介して行われることを意味しますか/dev/fd
  2. Linuxでは、プロセスの交換はどのように実装されますか?

    次の例は、Linuxでプロセスの置き換えが名前付きパイプの代わりにファイルを介して実装/dev/fdされることを意味しますか?

    $ echo <(cat)
    /dev/fd/63
    
  3. ではcommand1 <(command2)、2つのコマンドが同時に実行されますか、それとも別のコマンドの実行が完了した後に1つのコマンドが開始されますか?

    プロセス交換が名前付きパイプを介して実装されている場合、プロセス交換例の2つのコマンドが同時に実行されることを意味しますか?私の考えは、パイプと名前付きパイプが同時に実行されるプロセス間の通信に使用され、パイプのコマンドが同時に実行されるためであるようです。

    回答のパート2を理解しようとしたときにこの問題が発生しました。 https://unix.stackexchange.com/a/286556/674

ありがとうございます。

ベストアンサー1

  1. strace私のシステムの出力を見ると、strace -v -f -s150 -o log bash -c 'echo <(cat)'/ dev / fdがパイプとして実装されています。 3、4つのfdを持つパイプを作成し、3を63にコピーします。
  2. /dev/fdただシンボリックリンクです/proc/self/fd。私のシステムに/dev/fdシンボリックリンクがなく、出力は/proc/self/fd/63.Bashはパイプとしてのみ機能します。 Bashソースコードでは、他のbash'ismのようにエミュレートできるように見えますが、/dev/tcpわかりません。しかし、私はそのようなことをまったく見ませんでしたbusybox ash
  3. echobash全体を組み込みコマンドにtty置き換えると、最初に実行され、次にプリロードされたパイプラインfdを使用して実行されるstraceことがわかります。ttycat

おすすめ記事