进程组如何拥有进程ID?

进程组如何拥有进程ID?

我正在读一本讨论进程组和 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是如何设置的?了解详情。

相关内容