Unix 进程有一个会话ID并且是一部分进程组- 可以使用以下功能更改/查询setsid()
/getpgrp()
.
然而,一个概念进程组 and session总是让我困惑,有人能解释一下不同的会话和进程组提供什么意义吗?为什么/何时要创建一个新会话或将多个进程放在同一会话和/或进程组中?
A 进程组是可以同时发出信号的相关进程的集合。
A session是进程组的集合,这些进程组要么附加到单个终端设备(称为控制终端)或未连接到任何终端。
会话用于作业控制:会话中的进程组之一是前台进程组,可以通过终端控制字符发送信号。您可以将与控制终端的会话视为对应于该终端上的“登录”。 (守护进程通常通过创建一个没有控制终端的新会话来使自己与任何控制终端解除关联。)
例如如果你跑some_app
从 shell 中,shell 为其创建一个新的进程组,并使其成为会话的前台进程组。 (some_app
可能会创建一些子进程;默认情况下,它们将属于同一进程组。)如果您然后按^Z
, some_app
的进程组收到停止它的信号; shell的进程组再次切换为前台进程组。然后例如bg %1
会开始some_app
再次运行进程组,但保持其在后台运行。
The POSIX.1-2008标准 http://pubs.opengroup.org/onlinepubs/9699919799/是相当可读的(至少,我认为是这样!) - 看看定义 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html以及相关章节《通用终端接口》 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap11.html#tag_11章节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)