たとえば、シェルで次のコマンドを実行したとします。
ls | grep "abc" | wc
子プロセスがシェルから分岐する方法と、このように子プロセスがどのように機能するかを理解しています。
Shell (pid=12)
\
\
ls (pid=13)
しかし、パイプと後続のコマンドがどのように適合するかはわかりません。それらはシェルの子でもあり、そうではありませんls
か?
たとえば、シェルで次のコマンドを実行したとします。
ls | grep "abc" | wc
子プロセスがシェルから分岐する方法と、このように子プロセスがどのように機能するかを理解しています。
Shell (pid=12)
\
\
ls (pid=13)
しかし、パイプと後続のコマンドがどのように適合するかはわかりません。それらはシェルの子でもあり、そうではありませんls
か?
パイプラインの各コンポーネントは、シェルの子プロセスになります。別の端末から使用するpstree -p
と、おそらく次のように表示されます。
...
sshd(11)---bash(12)-+-ls(13)
|-grep(14)
\-wc(15)
...
(パイプラインがまだ実行されている間にこれを実行できると仮定します!)
ただし、すべてのコンポーネントが 1 つのプロセス グループを形成することに注意してください。
パイピング自体は Linux (または使用している OS) の機能であり、別のユーザー プロセスではありません。シェルはいくつかの匿名パイプを作成し、パイプライン内のプロセスの各ペアに関連するファイル記述子に接続します。