跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Linux 进程管理进阶:会话、进程组与守护进程实践

综述由AI生成Linux 进程管理涉及会话、进程组及守护进程的核心机制。了会话与用户登录的关系,演示了前台与后台进程的切换命令(fg/bg/jobs),并深入剖析了进程组 ID 与组长进程的原理。针对守护进程,阐述了其脱离终端控制的创建步骤,包括 fork 子进程、setsid 创建新会话、重定向标准输入输出至/dev/null 以及设置 umask 等关键系统调用,帮助开发者理解 Linux 服务稳定运行的底层逻辑。

灰度发布发布于 2026/1/21更新于 2026/6/516 浏览
Linux 进程管理进阶:会话、进程组与守护进程实践

【一】会话

'会话'可理解为一个区域,通常一个用户登录对应一个会话。每个'会话'相互独立,关闭一个不会影响其他会话。在一个会话内包含多个进程,例如解析 OS 命令的应用程序(如 bash),它处于 OS 与用户中间。

注意:bash 进程不是 OS 的子进程,而是用来解析用户命令给 OS 的应用程序子进程。

文章配图

【二】前/后台进程

谁是前台或后台进程取决于谁拥有键盘。例如,Ctrl+C 信号只对当前的前台进程有效。每个会话区只允许存在一个前台进程,其余为后台进程。

前台切后台进程

在命令末尾加 &,进程会被丢到后台运行(例如:./Ceshi &)。此时它变为了后台进程,无法直接读取键盘输入。

文章配图

文章配图

查看后台进程

执行指令 jobs,即可查看后台进程,其中最前面的数字是作业编号(理解为后台进程编号)。

文章配图

后台切前台进程

执行指令 fg %作业号 可以把后台作业拉到前台运行。

文章配图

暂停与继续

这里我们采用 19 号信号来暂停后台进程(fg 作业号 是切换到前台,我习惯用 19 号信号暂停)。

继续运行后台进程:执行指令 bg 作业号 即可让后台暂停的进程继续运行。

【三】进程组与守护进程

(1)查看进程组

一个会话中存在多个进程组,即相关联的进程集合。

文章配图

注意:前台进程组是唯一的,但前台进程组并非只有一个进程,比如:ls -l | grep ".txt" | wc -l。

进程组的创建者(第一个进程)就是该进程组的组长(组长进程的 PID 就是组员的 PGID)。组内所有进程都继承组长的 PGID,直到组长退出或进程被迁移到其他组。

简单粗暴,可使用指令:ps -efj

  • -e: 显示系统内所有进程
  • -f: 显示完整的信息(包括 UID, PID, PPID, C, STIME, TTY, TIME, CMD)
  • -j: 显示与作业控制相关的信息(包括 PGID, SID)

文章配图

参数含义:

字段含义与进程组的关系
UID用户 ID进程的所有者
PID进程 ID每个进程唯一的标识符
PPID父进程 ID创建该进程的进程 ID
PGID进程组 ID**核心字段!**同一个进程组内的所有进程拥有相同的 PGID。通常,进程组的组长进程的 PID 等于 PGID
SID会话 ID进程所属会话的 ID。一个会话可以包含多个进程组
CCPU 使用率进程使用的 CPU 百分比
STIME启动时间进程开始运行的时间
(2)守护进程

守护进程是运行在后台的特殊进程,它独立于控制终端,不受用户登录或注销的影响。如何理解:我们的计算机桌面窗口可以理解为一个会话窗口,守护进程单独成一个会话窗口。

文章配图

(3)守护进程原理

主要原理:原进程 A 由父进程管理,而父进程主动退出,子进程 A 就变为了孤儿进程,父进程变为该会话的第一个进程,比如 bash 进程,再通过系统调用让 A 进程脱离这个终端/会话(不接受终端退出时的信号操作),成为守护进程(kill -9 -19 这两个特殊的信号除外)。

(4)如何创建守护进程

创建子进程,父进程主动退出:

pid_t pid = fork();
if (pid > 0) exit(0);
else {
    // 子进程继续执行
}

子进程单独成为会话:使子进程成为会话首进程,脱离原终端

setsid();

忽略一定的信号:

signal(SIGHUP, SIG_IGN);
signal(SIGSTOP, SIG_IGN);
// ...

切换工作目录:

chdir("/");

设置文件权限掩码为 0:确保创建的文件和目录拥有最大的权限

umask(0);

可以将守护进程的日志信息打印到 /dev/null(垃圾站):

const char* ptr = "/dev/null";
int fd = open(ptr, O_RDWR);
if (fd > 0) {
    dup2(fd, 0);
    dup2(fd, 1);
    dup2(fd, 2);
}

目录

  1. 【一】会话
  2. 【二】前/后台进程
  3. 前台切后台进程
  4. 查看后台进程
  5. 后台切前台进程
  6. 暂停与继续
  7. 【三】进程组与守护进程
  8. (1)查看进程组
  9. (2)守护进程
  10. (3)守护进程原理
  11. (4)如何创建守护进程
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Scratch 与 Python 编程语言核心差异对比
  • CTF Web25:php_mt_seed 伪随机数爆破实战应用
  • 使用 Python + Flask + Tailwind 快速搭建个人博客
  • 快速排序核心原理与多版本实现详解
  • FPGA 嵌入式块存储器 RAM:原理与实现指南
  • VRM4U 插件指南:在 Unreal Engine 5 中高效处理 VRM 模型
  • 前端文件下载实战:从原理到最佳实践
  • Ubuntu 前端开发环境搭建与 Vue 实战
  • 使用 AI 工具(Cursor/VS Code)调试 MATLAB 代码实测
  • 大模型降低 AIGC 率指令策略与实战指南
  • C++ 函数重载:核心规则、实现原理与实战
  • MySQL 环境配置实战:CentOS 与 Ubuntu 双系统安装指南
  • RAG 利用 Rerank 与两阶段检索提升检索质量
  • LangChain 大模型开发框架核心组件与实战指南
  • 二叉树前中后序遍历详解:递归与迭代实现
  • ThreeJS 项目结构详解:场景初始化与模型构建流程
  • 后仿真 SDF 反标常见 Warning 分析与处理指南
  • 使用 Nanoedge AI Studio 和 STM32Cube AI 实现 STM32 边缘计算
  • Android 编程权威指南:深入理解 Intent 与任务机制(一)
  • 融合手术导板与增强现实的椎弓根螺钉置入技术验证

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online