我正在读一本讨论进程组和 shell 的教科书,它说:
Unix shell 使用作业的抽象来表示由于评估单个命令行而创建的进程。在任何时间点,最多有一个前台作业和零个或多个后台作业。例如,键入
linux> ls | sort
会创建一个前台作业,该作业由通过 Unix 管道连接的两个进程组成:一个运行 ls 程序,另一个运行 sort 程序。 shell 为每个作业创建一个单独的进程组。
可以看到前台作业有进程id(pid) 进程组id(pgid) 并且都是20
我的问题是:
Q1-有人告诉我进程组可以被认为是一个作业,但是为什么图中的前台作业有一个进程ID?我的理解是,进程是执行中的程序的一个实例,进程组由其成员进程组成,所以进程组几乎是一个抽象概念,那么概念怎么可能是执行中的程序的实例呢?
Q2-I还被告知:按照惯例,进程组的进程组ID等于进程组的第一个成员的进程ID。所以在图中,前台作业的 pgid 应该是 21,因为它的第一个成员(子进程)的 pid 是 21?
答案1
在图中,进程组概念由虚线方块表示,而不是圆圈。圆圈都代表进程,“作业”是每组中的第一个进程。
看进程组ID是如何设置的?了解详情。