次のセッションでは、bash は 2 つの異なるパイプラインを開始しますが、同じ pgid を共有しています。パイプラインが削除されると (サブシェルで個別のls
パイプラインが呼び出されないように)、2 つのパイプは個別のプロセス グループを取得します。何を与える?特に、非対話型シェルが異なるパイプラインを同じプロセス グループに配置するのは正しい動作ですか? それとも私は何かを誤解していますか?
bash-3.2$ cat print-pgid
#!/bin/sh
echo $$ starting in $(ps -o pgid= $$) >&2
bash-3.2$ ls | for i in a b; do ./print-pgid | ./print-pgid & done
bash-3.2$ 67396 starting in 67393
67395 starting in 67393
67397 starting in 67393
67398 starting in 67393
bash-3.2$ for i in a b; do ./print-pgid | ./print-pgid & done
[1] 67404
[2] 67406
bash-3.2$ 67404 starting in 67403
67403 starting in 67403
67405 starting in 67405
67406 starting in 67405
[1]- Done ./print-pgid | ./print-pgid
[2]+ Done ./print-pgid | ./print-pgid
bash-3.2$