关于进程、进程组、会话的概念及函数问题

发布于 2022-07-19 21:34:58 字数 1415 浏览 9 评论 3

最近研究进程和进程组的概念,有些明白,又有些糊涂。

以下论述都是我个人理解,哪里有问题,请高手指教。

首要问题是进程到底只能属于一个组,还是可以属于多个组?
我看材料理解是一个进程可以属于多个组,但是这样的话,进程怎么脱离某个组(除了终止方式)?
所以在以下论述中我是认为进程只能属于一个组。

(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

波浪屿的海角声 2022-07-24 02:28:12

我看过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。
-------------

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

盛夏尉蓝 2022-07-23 04:31:39

相关问题APUE相关章节讲的非常好

树深时见影 2022-07-21 01:20:04

沙发

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文