加载中...
进程组与会话是类 UNIX 系统中对进程进行分层组织的机制。进程组把相关进程归为一组便于统一发送信号,会话则将若干进程组关联到一次登录或终端连接。

| 组织层级 | 会话 > 进程组 > 进程 |
| 进程组标识 | 组长进程 PID |
| 创建会话 | setsid |
| 控制终端 | 会话可关联 |
| 用途 | 作业控制/信号分发 |
进程组(Process Group)与会话(Session)是类 UNIX 操作系统中用于组织和管理进程的层级结构。进程组是一组相关进程的集合,会话则由一个或多个进程组构成,通常对应一次终端登录,是作业控制与信号分发的基础。
每个进程都有进程号(PID),同时归属于某个进程组(以组长进程 PID 标识)和某个会话。当用户在 Shell 中执行一条管道命令时,其中的多个进程会被放入同一个进程组,便于一次性对整组发送信号(如按下终止键)。若干进程组又归属于一个会话,会话可关联一个控制终端,其中至多一个进程组为前台组、其余为后台组。
进程组与会话是 Shell 作业控制的核心,支持前后台切换、组合命令的统一管理。守护进程借助 setsid 脱离终端在后台长期运行。理解这一机制有助于排查为何关闭终端会导致进程退出,以及如何用 nohup、setsid 等方式让任务不受终端影响。
问:为什么关闭终端后台任务会被杀死?答:终端关闭时会向前台进程组或会话发送挂断信号,若进程未脱离会话或未忽略该信号就会终止。用 nohup 或 setsid 可让进程脱离控制终端而继续运行。
问:进程组和会话哪个范围更大?答:会话范围更大,一个会话包含若干进程组,一个进程组包含若干进程,三者构成由大到小的层级关系。

| 组织层级 | 会话 > 进程组 > 进程 |
| 进程组标识 | 组长进程 PID |
| 创建会话 | setsid |
| 控制终端 | 会话可关联 |
| 用途 | 作业控制/信号分发 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧