Linux--守护进程与会话
进程组
概念
进程组就是一个或多个进程的集合。
一个进程组可以包含多个进程。
下面我们通过一句简单的命令行来展示:
为什么会有进程组?
- 批量操作:进程组允许将多个进程组织在一起,形成一个逻辑上的整体。当需要对多个进程执行相同的操作时,可以通过进程组进行操作实现,不用对每一个进程执行相同的操作,这样大大提高执行效率。
- 任务控制:在Linux操作系统中,进程组与作业控制紧密联系。用户可以通过作业控制指令来管理进程组中的进程,从而实现任务的启动、暂停、恢复、停止等功能。
- 功能联系:进程组中的进程通常在功能上都有相近的联系,它们协同工作完成特定任务。通过进程组可以快速的管理和这些具有共同目标的进程。
如果只有一个进程,是否有进程组?
组长进程
每一个进程组都有一个组长进程,这个进程的PID与进程组ID一样。
- 作用:进程组组长可以创建一个进程组
- 生命周期:从进程组创建存在到其中一个最后进程离开为止。
会话
概念
由多个进程组组成的集合,称为会话(session ID)。
它提供了一个运行环境和资源共享的上下文,包含了一组相关的进程,这些进程具有共同的会话标识符(SID)。
像我们通过Xshell打开的一个会话页面,就是一个会话。
我们可以通过命令查看已打开的会话:
ls /dev/pts/
setsid()
setsid() 函数在 Unix 和类 Unix 系统中用于创建一个新的会话(session),并使调用该函数的进程成为新会话的领头进程(session leader)。这通常与创建守护进程(daemon processes)相关,因为守护进程需要独立于任何控制终端运行。
但setsid()被执行时:
- 创建新的会话:如果调用 setsid() 的进程不是进程组的领头进程,则该函数会创建一个新的会话,并使调用进程成为该会话的领头进程。新会话的会话ID(SID)是该进程的PID。
- 使调用进程脱离控制终端:如果调用 setsid() 的进程之前有一个控制终端,那么调用之后,该进程将不再具有控制终端。这意味着该进程不再是任何终端进程组的成员,也不再与任何终端相关联。
- 使调用进程成为新进程组的领头进程:调用 setsid() 会导致调用进程成为一个新进程组的领头进程,该进程组
本文地址:https://www.vps345.com/9267.html