会话、进程组、进程个人理解。http://bbs.chinaunix.net/thread-2176051-1-1.html

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

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

[ 本帖最后由 wkathy 于 2008-4-2 17:00 编辑 ]
 
   

帖子
220
主题
16
精华
0
可用积分
187
信誉积分
100
专家积分
0
在线时间
4 小时
注册时间
2006-05-23
最后登录
2011-09-03
论坛徽章:
0
2[报告]
  发表于 2006-06-02 15:28:15  | 只看该作者
沙发
 
   

Rank: 1

帖子
421
主题
5
精华
1
可用积分
650
信誉积分
1034
专家积分
0
在线时间
846 小时
注册时间
2004-06-28
最后登录
2015-06-24
论坛徽章:
0
3[报告]
  发表于 2006-06-02 20:45:41  | 只看该作者
相关问题APUE相关章节讲的非常好
 
   

Rank: 1

帖子
75
主题
14
精华
0
可用积分
260
信誉积分
123
专家积分
0
在线时间
4 小时
注册时间
2006-05-14
最后登录
2013-12-05
论坛徽章:
0
4[报告]
  发表于 2006-06-04 17:55:08  | 只看该作者
我看过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。
-------------

看了好多参考资料,晕乎乎的。
 
   

帖子
87
主题
11
精华
0
可用积分
68
信誉积分
100
专家积分
0
在线时间
81 小时
注册时间
2009-11-05
最后登录
2010-10-17
论坛徽章:
0
5[报告]
  发表于 2010-04-08 03:53:23  | 只看该作者
总结的很好 谢谢{:2_163:}
大便的时候要留一半,免得饿得快~ 
 
   
性别:男,爱好:女。

Rank: 3Rank: 3

帖子
6857
主题
494
精华
0
可用积分
4251
信誉积分
991
专家积分
105
在线时间
2558 小时
注册时间
2010-05-03
最后登录
2014-08-06
论坛徽章:
0
6[报告]
  发表于 2010-05-24 15:14:04  | 只看该作者
准备看APUE的这一章节了!!先预习一下~!!
 
   
肚脐眼上撒盐

帖子
86
主题
6
精华
0
可用积分
126
信誉积分
31
专家积分
0
在线时间
75 小时
注册时间
2008-05-12
最后登录
2015-09-10
论坛徽章:
0
7[报告]
  发表于 2010-05-25 18:37:39  | 只看该作者
APUE?UNIX环境高级编程?
 
   
性别:男,爱好:女。

Rank: 3Rank: 3

帖子
6857
主题
494
精华
0
可用积分
4251
信誉积分
991
专家积分
105
在线时间
2558 小时
注册时间
2010-05-03
最后登录
2014-08-06
论坛徽章:
0
8[报告]
  发表于 2010-05-26 13:47:26  | 只看该作者
APUE?UNIX环境高级编程?
kuok2000 发表于 2010-05-25 18:37 



    yes,you are right
 
   

帖子
1
主题
0
精华
0
可用积分
2
信誉积分
20
专家积分
0
在线时间
5 小时
注册时间
2013-01-21
最后登录
2015-07-31
论坛徽章:
0
9[报告]
  发表于 2015-07-12 15:35:35  | 只看该作者
楼主的总结应该是有问题的,我的理解如下:
BColorImageLinkQuoteCodeSmilies|添加附件

       int setpgid(pid_t pid, pid_t pgid);
       setpgid() sets the PGID of the process specified by pid to pgid.  If pid is zero, then the
       process  ID of the calling process is used.  If pgid is zero, then the PGID of the process
       specified by pid is made the same as its process ID.  If  setpgid()  is  used  to  move  a
       process  from  one process group to another (as is done by some shells when creating pipe
       lines), both process groups must be part of the same session (see  setsid(2)  and  creden
       tials(7)).   In  this  case, the pgid specifies an existing process group to be joined and
       the session ID of that group must match the session ID of the joining process.
按照man setpgid的解释,以及APUE的解释,如果设置参数pid为0,则会将当前进程的pid设置为参数pid值,
如果参数pgid为0,则会将pid对应的进程组设置为进程的id(也就是创建新的进程组的意思)。
后面还说到如果要改变pid的进程组,则这两个两个进程组必须在同一个会话中。

所以按照楼主的说法
在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。//这个应该是等价于setpgid(pid2,pid2);
     e)当pid2和pgid3都==0时,返回错误。//这里不会返回错误,其实等价于setpgid(pid1,pid1);
以上大概这些都验证过,有什么不对的,请帮忙更正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值