一、进程组(PGID)
1.进程组是一个或多个进程的集合,它们与同一作业相关联,可以接收来自同一中端的各种信号;
2.每个进程都属于一个进程组;
3.多个毫不相关的进程可能共同协作完成同一个作业;
4.组长进程:每个进程组有一个组长进程,它是该组的第一个进程,组长进程的ID等于进程组的ID;
5.一个进程组中,只要有一个进程存在,这个进程组就存在,它与组长没有关系,只是用了组长进程的PID作为该进程组的PGID;
二、作业
1.Shell分前台后台控制的是作业或者进程组,而不是进程,此时,可以把作业和进程组都当做作业处理;
2.一个前台作业或后台作业都可以由多个进程组成,如下图所示;
3.作业控制:Shell可以运行一个前台作业或多个后台作业;
4.作业和进程组的区别:如果作业中的某个进程右创建了子进程,该子进程属于进程组,不属于作业;
5.前台作业几首用户的输入指令,由前台获取;
6.ctrl+c 暂停或终止前台作业,前台作业又包含多个进程,所以终止了多个进程;
三、会话(SID)
1.一次会话由多个进程组组成,一个会话可以有一个控制终端;
2.一个会话中的进程可由一个前台进程组和一个或多个后台进程组组成;
3.控制进程;建立与控制终端连接的会话首进程;
4.一个会话应该包括控制进程、一个前台进程组,一个或多个后台进程组三部分;
5.一个进程组的会话SID一般为父进程的ID,即PPID,它们的父进程属于当前进程的bash;
6.第一个与终端产生会话的进程为bash,bash通常作为控制进程使用,新打开一个终端时,会产生一个新的bash,形成新的对话;
7.bash本身就是一项作业,自成进程组,它的PID,PGID,SID相同;
如图所示: