在接下来的会话中,bash 启动了两个不同的管道,但它们共享相同的 pgid。当ls
管道被移除(因此不同的管道不会在子外壳中调用)时,两个管道将获得不同的进程组。是什么赋予了?特别是,非交互式外壳将不同的管道放在同一个进程组中是否正确?还是我误解了什么?
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$