会话、进程组、进程个人理解

(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)。

你可能感兴趣的:(c,终端)