本片博客用到的相关指令fg,bg,jobs,ps等可自行查阅。
进程组
每个进程除了有一个进程ID之外还有一个进程组ID。每个进程都属于一个进程组。进程组是一个或多个进程的集合。每个进程都有一个唯一的进程组ID。每个进程都有一个组长进程。
组长进程标志:其所属进程组ID等于其进程ID。
进程组就是进程的集合,这些进程并不是孤立的,他们彼此之间或者存在父子、兄弟关系,或者在功能上有相近的联系。每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构。
(init 1号进程)
组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要该进程中的任意一个进程存在,则该进程组就存在,与其组长进程是否存在无关。(战斗到最后一个人)
作业
shell分前后台控制的不是进程而是作业(JOB)或者进程组,一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成,一个shell可以同时运行一个前台作业和多个后台作业,这称为作业控制。
但我们想把一个作业放到后台运行时,可以在运行指令的后面加上 “&”,并且系统会返回当前作业的作业号,以及进程的进程ID。
eg:
./a.out &
一个作业可以是一个进程,也可以是几个进程的集合。例如:
- 单个在后台执行一个a.out: