关于进程、进程组、会话的概念及函数问题
最近研究进程和进程组的概念,有些明白,又有些糊涂。
以下论述都是我个人理解,哪里有问题,请高手指教。
首要问题是进程到底只能属于一个组,还是可以属于多个组?
我看材料理解是一个进程可以属于多个组,但是这样的话,进程怎么脱离某个组(除了终止方式)?
所以在以下论述中我是认为进程只能属于一个组。
(1)进程必定属于一个进程组,也只能属于一个进程组。
进程与进程组之间是一对一,多对一的关系。
(2)进程pid从1开始,每次分配时,寻找系统中未被占用的最小标识。
(3)如果pid1进程属于pgid1进程组,pid2属于pgid2进程组,并且是pgid2进程组组长。
在pid1进程中调用setpgid(pid2,pgid3);
a)当pid2和pgid3都>0且不相等时
功能:将pid2进程加入到pgid3组。此时pid2进程脱离pgid2进程组,进入pgid3进程组。
b)当pid2和pgid3都>0且相等时
功能:pid2进程加入pgid3进程组。此时pid2进程脱离pgid2进程组,进入pgid3进程组成为组长。那么如果pgid3中原来有组长,将会怎么样?
c)当pid2==0,pgid>0时
功能:将调用进程pid1加入到pgid3中。此时pid1脱离pgid1,进入pgid3。
d)当pid2>0,pgid==0时
功能:将pid2加入到调用进程所在的pgid1进程组。此时pid2脱离pgid2,进入pgid1。
e)当pid2和pgid3都==0时,返回错误。
(4)一次登录就形成一次会话,会话组长即创建会话的进程。
(5)没有会话时有进程组吗?会话、进程组、进程三者的先后顺序是什么样的?
(6)如果pid1进程属于pgid1进程组,属于会话sid1。
在pid1进程中调用setsid();
功能:pid1进程脱离pgid1进程组,创建一个新的会话sid2(sid2没有控制终端),pid1进程加入到pgid2组(pgid2==pid1)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我看过apue,但是那上面关于进程组的内容仅仅一页,基本内容就这些
-------------
每个进程除了有一进程I D之外,还属于一个进程组。
进程组是一个或多个进程的集合。
某个进程组中的最后一个进程可以终止,也可以参加另一个进程组(参加后还属于原来的进程组吗?)。
进程调用s e t p g i d可以参加一个现存的组或者创建一个新进程组。
int setpgid(pid_t p i d, pid_t p g i d);
将pid 进程的进程组I D设置为p g i d。
如果这两个参数相等,则由pid 指定的进程变成进程组组长。
如果p i d是0,则使用调用者的进程I D。
如果p g i d是0,则由p i d指定的进程I D被用作为进程组I D。
-------------
看了好多参考资料,晕乎乎的。
相关问题APUE相关章节讲的非常好
沙发