Unix进程具有一个 session ID,并且是进程组的一部分-可以使用setsid()/ getpgrp()之类的函数来更改/查询该进程组。
但是,过程组和 session 的概念始终使我难以理解,任何人都可以解释拥有不同的 session 和过程组的意义-为什么/何时创建一个新 session 或将多个过程置于同一 session 和/或过程组中?
最佳答案
流程组是相关流程的集合,这些流程可以一次发出所有信号。
session 是过程组的集合,这些过程组要么附加到单个终端设备(称为控制终端),要么不附加到任何终端。
session 用于作业控制: session 中的进程组之一是前台进程组,可以通过终端控制字符发送信号。您可以将与控制终端的 session 视为与该终端上的“登录”相对应。 (守护进程通常通过创建一个没有 session 的新 session 来将自己与任何控制终端解除关联。)
例如如果从 shell 程序运行some_app
,则 shell 程序会为其创建一个新的进程组,并使该 session 成为前台进程组。 (some_app
可能会创建一些子进程;默认情况下,它们将成为同一进程组的一部分。)如果然后按^Z
,则指示some_app
的进程组将其停止;否则,将其停止。然后将Shell的进程组再次切换为前台进程组。然后例如bg %1
将再次启动some_app
的进程组,但使其在后台运行。
POSIX.1-2008 standard可读性很强(至少,我认为是这样!)-看一下definitions和"General Terminal Interface"一章的相关部分。
关于unix - Unix中 session 和进程组的用途和含义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6548823/