通常、Unixのパイプは2つのコマンドを接続し、最初のコマンドの出力を2番目のコマンドの入力として使用するために使用されます。しかし最近、私はパイプを使って複数のコマンドを並列に実行するというアイデアを思いつきました(これは新しいものではないかもしれませんが、インターネット検索ではあまり見つかりませんでした)。
command1 | command2
これは並列に呼び出されますcommand1
。command2
command2
標準入力から読み取らないcommand1
場合、または標準出力に書き込まない場合t。これを説明するための最小限の例(対話型シェルで実行してください)
ls . -R 1>&2|ls . -R
私の質問は、パイプを使用してこのように2つのコマンドを並列に実行することに欠点がありますか?このアイデアに私が逃した部分はありますか?
よろしくお願いします。
ベストアンサー1
コマンドパイプラインはすでに並列に実行されています。使用コマンド:
command1 | command2
command1
どちらもcommand2
始まりました。予約されていてcommand2
パイプが空の場合、読み取りを待つのはブロックされます。command1
パイプに書き込もうとしていますが、パイプがいっぱいになると書き込むcommand1
スペースができるまでブロックされます。それ以外の場合command1
と両方がcommand2
並列に実行され、パイプに書き込まれ、パイプから読み取られます。