1. 首先查看当前使用的shell,因为不同的shell环境,对管道的实现可能不同,进而会影响下面的讨论 。在终端输入env | grep SHELL来查看当前使用的shell
可见,本系统中使用的shell环境为 /bin/bash.
2. 在终端中输入ps | cat
下图为输入命令ps |cat 后的情况,shell生成两个进程 ps 和 cat,并且 ps 与 cat 的父进程都为 bash,ps 与 cat 同属于一个进程组,ps为进程组组长进程;bash单独为一个进程组,并且是一个组长进程。bash与ps和cat组成一个会话组,bash为会话组长进程。由于ps|cat在前台运行,ps 与 cat 所在的进程组为前台进程组,其它的进程组为后台进程组。
当输入 ps | cat & 后,情况与上面类似,只不过ps与cat所在的进程组为
后台进程组,bash所在的进程组为前台进程组。
在当前的shell( /bin/bash)环境中,无论在管道线有多少个进程(ps | cat | more) ,它们的父进程都是bash,管道线中的每个进程都属于同一个进程组。