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

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

综述由AI生成深入探讨了 Linux 进程管理的核心概念,包括会话(Session)、进程组(Process Group)及守护进程(Daemon)。内容涵盖前台与后台进程的切换机制(fg/bg/jobs)、进程组信息的查看方法(ps -efj),以及守护进程创建的底层原理与标准实现步骤。通过 Fork、Setsid、信号处理及文件描述符重定向等关键代码示例,帮助开发者理解如何在 Linux 环境下构建稳定运行的后台服务。

黑客发布于 2026/3/15更新于 2026/6/1322 浏览
Linux 进程管理进阶:会话、进程组与守护进程实践

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

在 Linux 的世界里,进程并非孤立存在。当我们执行一条命令或启动一个服务时,这些进程会以**会话(Session)**为'社交圈'、进程组(Process Group)为'小团体'的形式组织起来;而那些在后台默默运行、不受终端影响的守护进程(Daemon),则是系统稳定运行的幕后英雄。

一、会话(Session)

会话可以理解为进程的一个逻辑区域。通常,一个用户登录对应一个会话。每个会话之间是并行的,关闭一个会话不会影响其他会话。在一个会话内部,包含了许多进程。

注意: 我们登录时打开的 Shell(如 bash)进程并不是操作系统的子进程,而是用来解析用户命令给操作系统的应用程序子进程。

二、前/后台进程管理

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

1. 前台切后台

在命令末尾加上 &,进程会被丢到后台运行。

./Ceshi &

此时它变为后台进程,无法直接读取键盘输入。

2. 查看后台进程

执行 jobs 指令即可查看当前会话中的后台作业,最前面的数字是作业编号(Job ID)。

jobs

3. 后台切前台

使用 fg %作业号 可以将后台作业拉回前台运行。

fg %1

4. 暂停与继续

我们可以使用信号来暂停后台进程。例如 SIGSTOP (信号 19) 用于暂停,bg 命令则用于让暂停的后台进程继续运行。

# 暂停
kill -19 %1
# 继续
bg %1

三、进程组与守护进程

1. 查看进程组

一个会话中可以存在多个进程组。相关联的进程集合即为一个进程组。前台进程组是唯一的,但其中可以包含多个进程(例如管道命令 ls | grep | wc)。

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

可以使用以下指令查看详细信息:

ps -efj
  • -e: 显示系统内所有进程
  • -f: 显示完整信息(UID, PID, PPID 等)
  • -j: 显示作业控制相关信息(PGID, SID)
字段含义与进程组的关系
PID进程 ID唯一标识符
PPID父进程 ID创建该进程的进程
PGID进程组 ID核心字段!同组进程 PGID 相同
SID会话 ID所属会话的 ID

2. 守护进程原理

守护进程是运行在后台的特殊进程,独立于控制终端,不受用户登录或注销的影响。简单来说,原进程 A 由父进程管理,若父进程主动退出,子进程 A 变为孤儿进程,随后通过系统调用脱离原终端/会话,不再接收终端退出时的信号(如 SIGHUP),从而成为守护进程。

3. 如何创建守护进程

创建一个标准的守护进程通常需要遵循以下步骤:

  1. 创建子进程,父进程退出:确保主进程不占用终端。

    pid_t pid = fork();
    if (pid > 0) exit(0); // 父进程退出
    // 子进程继续执行
    
  2. 子进程单独成为会话:使子进程成为会话首进程,脱离原终端。

    setsid();
    
  3. 忽略挂起信号:防止终端关闭时收到 SIGHUP 信号。

    signal(SIGHUP, SIG_IGN);
    
  4. 切换工作目录:避免占用根文件系统或其他挂载点。

    chdir("/");
    
  5. 设置文件权限掩码:确保创建的文件和目录拥有最大权限。

    umask(0);
    
  6. 重定向标准输入输出:将日志信息打印到 /dev/null。

    int fd = open("/dev/null", O_RDWR);
    if (fd >= 0) {
        dup2(fd, 0); // stdin
        dup2(fd, 1); // stdout
        dup2(fd, 2); // stderr
    }
    

遵循以上步骤,即可构建一个基本的守护进程框架。实际开发中还需考虑资源限制、日志记录等更复杂的细节。

目录

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

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

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

更多推荐文章

查看全部
  • Windows 7 系统下 Git 安装与配置指南
  • 基于 LangChain、本地 Llama3.1 与 Chroma 构建 RAG 增强生成系统
  • C++ 核心面试题总结:语法、内存与面向对象
  • DeepCreamPy 二次元图片 AI 去码工具使用指南
  • OpenClaw 本地部署教程:环境配置、插件开发与常见问题排查
  • 4亿砸向除夕夜,史上机器人浓度最高春晚观察
  • AI 全栈开发:普通人构建数字产品的最优路径
  • 《大模型基础》:浙江大学专家撰写的大语言模型入门指南
  • Whisper-Tiny.en:超轻量英文语音识别模型解析
  • PostgreSQL 安装教程及初始使用
  • 深入理解 Java Static 关键字:工具类设计与 Spring 架构
  • OpenClaw Secure DM Pairing:AI 机器人安全私信访问机制
  • 基于 VoxCPM-1.5-TTS 实现配置文件差异语音提醒方案
  • HY-Motion 1.0 实战:健身指导、AR 试衣与元宇宙 NPC 驱动
  • Win10 升级后自动弹出 Copilot 窗口如何禁用与关闭
  • 因果推断实战:CATE 条件平均处理效应五大估计方法与 Python 模拟
  • C++11 核心特性实战:Lambda、可变参数模板与函数包装器
  • Flutter shelf_web_socket 鸿蒙适配指南:端侧 WebSocket 服务构建
  • 66 个 Java 常见代码示例:从基础语法到并发编程
  • FPGA 商用级 ISP:动态坏点校正 DPCC 的滑窗架构与并行判决实现

相关免费在线工具

  • 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