![每个进程组必须属于一个进程会话吗?](https://linux22.com/image/101356/%E6%AF%8F%E4%B8%AA%E8%BF%9B%E7%A8%8B%E7%BB%84%E5%BF%85%E9%A1%BB%E5%B1%9E%E4%BA%8E%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E4%BC%9A%E8%AF%9D%E5%90%97%EF%BC%9F.png)
每个进程组必须属于一个进程会话吗?换句话说,进程组是一个只存在于进程会话中的概念吗?
是否存在不属于任何进程会话的进程组?进程组可以没有会话ID吗?
disown
当通过内置命令从 bash shell 编辑进程组时disown
,进程组还存在吗?
原来在进程组中的进程是否仍然具有相同的组id,这意味着它们仍然构成一个进程组?
答案1
POSIX 定义会议因此:
为作业控制目的而建立的过程组的集合。每个进程组都是会话的成员。进程被视为其进程组所属会话的成员。新创建的进程加入其创建者的会话。进程可以改变其会话成员身份;看设置id()。同一会话中可以有多个进程组。
所有进程组都属于一个会话。但这些概念并不相互依赖,所以我不会说进程组是一个概念仅存在于会话中。
后台进程在创建时会被赋予自己的进程组,因此disown
ing 它们不会更改其进程组;disown
只操作 Bash 的作业表:
disown
[-ar
] [-h
] [工作规范...]没有选项,删除每个工作规范从活跃工作表中。如果工作规范不存在,并且既不提供
-a
也不-r
提供选项,则使用当前作业。如果-h
给出该选项,则每个工作规范不会从表中删除,但会被标记,以便SIGHUP
如果 shell 收到SIGHUP
.如果不工作规范提供后,该-a
选项意味着删除或标记所有作业;-r
没有的选项 工作规范参数将操作限制为正在运行的作业。返回值为 0,除非工作规范未指定有效的作业。