-1

unix で「cat filename | grep 詩 | wc -l」コマンドを実行すると、いくつのプロセスが使用されますか。上記のコマンドを実行するには、1プロセス、2プロセス、3プロセス……がありますか?

4

2 に答える 2

2

実際にはシェルに依存します。bash には 3 つのプロセスが必要です。バックグラウンドでこれらのコマンドの代わりに3つのスリープを実行し、後で実行しましpstreeた。これは私が得たものです:

> sleep 4s | sleep 4s | sleep 4s & pstree
 │         ├─bash───bash─┬─pstree
 │         │             ├─3*[sleep]

サブシェルで:

> ( sleep 4s | sleep 4s | sleep 4s ) & pstree
 │         ├─bash───bash─┬─bash───3*[sleep]
 │         │             ├─pstree

アップデート:

パイプラインをバックグラウンドに配置すると、実行されるサブシェルの数に影響を与える可能性があるため、これはパイプラインを実行するときの bash の動作を適切に示していませんでした。それらをフォアグラウンドで実行し、観察時に別の端末でプロセスの数を確認することをお勧めします。おそらく新しいバージョンでは、Bash はサブシェルの不必要な使用を防ぐことで、パイプラインの実行を最適化する場合があります。

于 2013-09-13T20:33:58.057 に答える
1

パイプは最初のプロセスから出力ストリームを取得し、次のプロセスの入力ストリームにします。コマンドごとにプロセスが保証されますが、それらの各プロセスは、操作に応じて子プロセスを作成する場合があります。

于 2013-09-13T20:20:44.033 に答える