会话

1、会话

一个会话可以包含1个或多个进程组,shell管道通常会将几个进程编成一组

比如:pro1 | proc2 && proc3|proc4|proc5|proc6

此时形成了两个进程组,p1,p2是一组,p3,p4,p5,p6又是一个进程组

2、setsid---建立会话

如果调用此函数的进程不是进程组的组长,则此函数创建一个新会话,如果已经是组长则创建出错。

如何保证创建会话的进程不是进程组的组长,通过fork创建子进程,然后关闭父进程,由于子进程继承父进程的进程组ID,所以它不是进程组长。

1)该进程会成为会话首进程,调用setsid的创建会话的进程为首进程,此时它是会话中唯一进程,(也将成为会话的控制进程--自己推断)

2)该进程会成为新进程组的组长进程,新进程组ID即为该进程ID

3)该进程没有控制终端关联,即使有也会被切断

3、getsid(pid)

获取指定进程的会话id,如果pid不在调用进程所在的会话,将不会返回会话首进程的组ID。

系统启动后,进入shell后,shell执行程序会在子进程中设置进程组ID--setpgid,让子进程在新的进程组中担任组长进程

原文地址:https://www.cnblogs.com/justart/p/7723114.html