进程组,会话,作业的概念
进程组是一个或者多个进程的集合;
会话是一个或者多个进程组的集合(一个会话中有一个前台进程组和零到多个后台进程组);
作业就是进程组,所以一个终端可以有多个作业
为什么要有进程组?在一个进程组与在不同的进程组有什么关系?进程组的目的是为了作业控制,进程组的主要特征就是信号可以发送给组内的所有进程,同一个进程组的进程可以接受来自同一个终端的各种信号.
tips
linux下执行 top|grep abc是把这两个进程放到同一个前台进程组执行的(在此期间shell处于后台进程组)
linux下执行 top|grep abc&是把这两个进程放到同一个后台进程组执行的(所以它们执行期间shell还可以正常执行)
一些函数
setsid新建一个会话,如果该进程为进程组的组长进程则出错,如果不是组长那么就会新建会话.
成功的话执行下面的流程:1.该进程成为新会话的会话首进程(会话首进程是创建该会话的进程),此时他是会话中的唯一进程
2.该进程成为一个新进程组的组长,新进程组ID是该进程的ID
3.该进程没有控制终端,如果调用setsid之前该进程有一个控制终端,那么控制终端也会切断
参考资料
1 UNIX环境高级编程(中文版第三版)
2 Linux系统编程中文版