父进程创建子进程的时候,默认子进程与父进程属于同一进程组,进程组ID==第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID==其进程ID
组长进程可以创建一个进程组,创建该进程组中的i进程,然后终止,只要进程组中有一个进程存在,进程就存在,与组长进程是否终止无关。
进程组生存期:进程组创建的最后一个进程离开(终止或转移到另一个进程组)。
一个进程可以为自己或子进程设置进程组ID
进程组操作函数
头文件:#include<unistd.h>
getpgrp函数:获得当前进程的进程组ID。原型:pid_t getpgrp(void);
getpgid函数:获得指定进程的进程组ID。原型:pid_t getpgid(pid_t pid);。成功返回0;失败返回-1,设置errno。(假如传入pid=0,则作用与getpgrp一样)
setpgid函数:改变进程默认所属的进程组。通常可用于加入一个现有的进程组或创建一个新进程组。原型:int setpgid(pid_t pid,pid_t pgid);。成功返回0;失败返回-1,设置errno。
pid:进程ID。pgid:进程组ID。
注意:1.改变子进程为新的组,应fork后,exec前。2.非root进程只能改变自己创建的子进程,或有权限操作的进程。