每个进程组必须属于一个进程会话吗?

每个进程组必须属于一个进程会话吗?
  1. 每个进程组必须属于一个进程会话吗?换句话说,进程组是一个只存在于进程会话中的概念吗?

    是否存在不属于任何进程会话的进程组?进程组可以没有会话ID吗?

  2. disown当通过内置命令从 bash shell 编辑进程组时disown

    • 进程组还存在吗?

    • 原来在进程组中的进程是否仍然具有相同的组id,这意味着它们仍然构成一个进程组?

答案1

POSIX 定义会议因此:

为作业控制目的而建立的过程组的集合。每个进程组都是会话的成员。进程被视为其进程组所属会话的成员。新创建的进程加入其创建者的会话。进程可以改变其会话成员身份;看设置id()。同一会话中可以有多个进程组。

所有进程组都属于一个会话。但这些概念并不相互依赖,所以我不会说进程组是一个概念仅存在于会话中。

后台进程在创建时会被赋予自己的进程组,因此disowning 它们不会更改其进程组;disown只操作 Bash 的作业表

disown[ -ar] [-h ] [工作规范...]

没有选项,删除每个工作规范从活跃工作表中。如果工作规范不存在,并且既不提供-a也不-r提供选项,则使用当前作业。如果 -h 给出该选项,则每个工作规范不会从表中删除,但会被标记,以便SIGHUP如果 shell 收到SIGHUP.如果不工作规范提供后,该-a选项意味着删除或标记所有作业;-r 没有的选项 工作规范参数将操作限制为正在运行的作业。返回值为 0,除非工作规范未指定有效的作业。

相关内容