会话、进程组、进程个人理解。
(1)进程必定属于一个进程组,也只能属于一个进程组。
一个进程组中可以包含多个进程。
进程组的生命周期从被创建开始,到其内所有进程终止或离开该组。
获取当前进程所在进程组ID使用函数getpgrp
创建或加入其他组使用函数setpgid
(2)假设条件:pid1进程属于pgid1进程组;pid2属于pgid2进程组,并且是pgid2进程组组长;另有进程组pgid3,
在pid1进程中调用setpgid(pid2,pgid3);
a)当pid2和pgid3都>0且不相等时
功能:将pid2进程加入到pgid3组。此时pid2进程脱离pgid2进程组,进入pgid3进程组。
b)当pid2和pgid3都>0且相等时
功能:pid2进程创建新进程组,成为新进程组长(pgid3=pid2)。
c)当pid2==0,pgid>0时
功能:将调用进程pid1加入到pgid3中。此时pid1脱离pgid1,进入pgid3。
d)当pid2>0,pgid==0时
功能:将pid2加入到调用进程所在的pgid1进程组。此时pid2脱离pgid2,进入pgid1。
e)当pid2和pgid3都==0时,返回错误。
(3)一次登录就形成一次会话,会话组长即创建会话的进程。
只有不是进程组长的进程才能创建新会话。
(4)如果pid1进程属于pgid1进程组,且不是组长,属于会话sid1。
在pid1进程中调用setsid();
功能:pid1进程脱离pgid1进程组,创建一个新的会话sid2(sid2没有控制终端),pid1进程加入到pgid2组(pgid2==pid1)。
转载于:https://my.oschina.net/fengyeshangqing/blog/335852