Linux Systemd 停止服务时杀死子进程的机制及 KillMode 参数详解
Systemd 停止服务时杀死子进程的机制1.Systemd 的进程控制原理Cgroup 控制组Systemd 利用 Linux 的 cgroup 机制来管理进程树# 查看服务的cgroupsystemctl show aservice --propertyControlGroup systemd-cgls /system.slice/aservice.service进程树关联当 systemd 启动服务时服务进程通常是 ExecStart 指定的进程被放入专用的 cgroup该进程的所有子进程会自动继承相同的 cgroupsystemd 监控整个 cgroup 中的所有进程2.停止服务时的默认行为默认信号发送# 默认发送 SIGTERMsystemctl stop aservice# 等同于kill-TERMmain_pid超时后的强制终止[Service] TimeoutStopSec90 # 默认90秒后发送SIGKILL KillModecontrol-group # 默认杀死cgroup中的所有进程3.KillMode 参数详解[Service] # 默认值杀死cgroup中的所有进程 KillModecontrol-group # 可选值 # control-group: 杀死cgroup中所有进程默认 # process: 只杀死主进程 # mixed: 向主进程发SIGTERM向子进程发SIGKILL # none: 不杀死任何进程4.避免子进程被停止的方法方法1使用 KillModenone[Service] Typesimple ExecStart/usr/bin/aservice KillModenone问题主进程退出后子进程变成僵尸或继续运行但systemd认为服务已停止。方法2分离子进程到不同cgroup使用setsid或nohup[Service] Typeforking ExecStart/usr/bin/aservice-wrapper # 包装脚本 # wrapper脚本示例 #!/bin/bash /usr/bin/nohup /usr/bin/real-daemon /dev/null 21 # 或 /usr/bin/setsid /usr/bin/real-daemon exit 0方法3使用 Typeforking 和正确的 PIDFile[Service] Typeforking PIDFile/var/run/aservice-main.pid ExecStart/usr/bin/aservice-daemonize KillModeprocess # 只杀死主进程方法4通过 Systemd 的 Scope 机制[Service] Typeoneshot RemainAfterExityes ExecStart/bin/bash -c systemd-run --scope --unitaservice-children.service /usr/bin/child-process方法5使用 Systemd 单元分离# aservice-parent.service [Service] Typeoneshot RemainAfterExityes ExecStart/bin/systemctl start aservice-children.service # aservice-children.service [Service] Typesimple ExecStart/usr/bin/child-process5.完整的最佳实践示例方案1双服务模式# /etc/systemd/system/aservice-main.service [Unit] DescriptionAService Main Controller Afternetwork.target Wantsaservice-workers.service [Service] Typesimple ExecStart/usr/bin/aservice-controller Restartalways KillModeprocess # 只杀控制器 [Install] WantedBymulti-user.target # /etc/systemd/system/aservice-workers.service [Unit] DescriptionAService Workers PartOfaservice-main.service # 主服务停止时这个服务也会停止 BindsToaservice-main.service # 主服务重启时这个服务也重启 [Service] Typeforking ExecStart/usr/bin/aservice-worker-manager KillModenone # 不杀工作进程方案2分离进程组[Service] Typesimple ExecStart/bin/bash -c cd / /usr/bin/setsid /usr/bin/real-daemon KillSignalSIGINT SendSIGKILLno6.生命周期管理策略使用启动脚本分离#!/bin/bash# /usr/libexec/aservice-starter# 创建独立会话{# 脱离当前控制组execsetsid$child_pid$!# 将子进程移出当前cgroupecho$child_pid/sys/fs/cgroup/systemd/tasks2/dev/null||true# 等待主进程结束wait$child_pidexit$?}Cgroup 手动管理[Service] Typeoneshot ExecStart/bin/bash -c # 启动子进程到独立cgroup mkdir -p /sys/fs/cgroup/systemd/independent echo $$ /sys/fs/cgroup/systemd/independent/tasks exec /usr/bin/child-process 7.信号转发机制信号处理器方案#!/usr/bin/env python3# signal-forwarder.pyimportosimportsignalimportsubprocessimporttimedefsignal_handler(signum,frame):# 不转发SIGTERM给子进程ifsignumsignal.SIGTERM:print(Received SIGTERM, exiting without killing children)os._exit(0)defmain():# 设置信号处理器signal.signal(signal.SIGTERM,signal_handler)# 启动子进程childsubprocess.Popen([/usr/bin/real-daemon])# 等待子进程或信号whileTrue:time.sleep(1)if__name____main__:main()8.注意事项和风险僵尸进程风险如果父进程退出而不等待子进程可能产生僵尸进程systemd 状态不一致KillModenone可能导致服务状态不准确资源泄露脱离管理的进程可能导致资源无法回收日志管理分离的进程需要独立的日志处理9.推荐的架构设计推荐架构 ┌─────────────────┐ │ Systemd │ │ (主服务单元) │ └─────────┬───────┘ │ control-group ▼ ┌─────────────────┐ │ 控制器进程 │ ← SIGTERM │ (轻量级) │ └─────────┬───────┘ │ 通过IPC/套接字 ▼ ┌─────────────────┐ │ 工作进程池 │ ← 独立管理生命周期 │ (setsid启动) │ └─────────────────┘关键原则主进程作为监督者负责启动/停止工作进程工作进程通过 setsid 创建独立会话使用 IPC 机制而不是父子进程关系进行通信工作进程优雅处理自己的终止逻辑这种方法既保持了 systemd 的管理能力又允许工作进程有独立的生命周期。

相关新闻

Pipelined ADC流水线模数转换器的工作原理

Pipelined ADC流水线模数转换器的工作原理

1、ADC模数转换器概述 模数转换器(Analog-to-Digital Converter,简称ADC)作为连接模拟信号与数字系统的核心器件,其主要功能是将连续的模拟信号转换为离散的数字信号。在实际应用中,ADC通过将输入信号与某一参考电压进…

2026/7/7 1:32:42 阅读更多 →
【2026最新版】计算机专业自学指南:从大一到大四步步为营,收藏这一篇就够了

【2026最新版】计算机专业自学指南:从大一到大四步步为营,收藏这一篇就够了

🎓 大学四年,是计算机专业学生打基础、提升技能的黄金时期。本文将为你提供一份详细的自学路线图,从大一到大四,每个阶段都有针对性的学习干货和方法,最后还有就业建议,让你的计算机之路越走越宽&#xff0…

2026/7/6 19:53:01 阅读更多 →
2026版最新黑客网站整理大全,全新整理黑客网站大全!收藏这一篇就够了

2026版最新黑客网站整理大全,全新整理黑客网站大全!收藏这一篇就够了

今天给大家分享一些学习网络安全的好去处。对于网络安全的学习,多逛论坛、阅读他人的技术分析帖是非常重要的。但有时候,初学者可能会感到迷茫,不知道去哪里寻找这些技术分析帖,也不知道有哪些相关的论坛或网站。所以,…

2026/7/3 3:42:58 阅读更多 →

最新新闻

Python 加密与解密实战 18 招(一):散列哈希加密

Python 加密与解密实战 18 招(一):散列哈希加密

Python 加密与解密实战 18 招(一):散列哈希加密 系列文章导航 第一篇:散列哈希加密(招式1-4)第二篇:对称加密(招式5-9)第三篇:非对称加密数字签名密钥交换&am…

2026/7/7 5:57:40 阅读更多 →
3分钟搞定Calibre图书信息自动化:国家图书馆ISBN插件终极指南

3分钟搞定Calibre图书信息自动化:国家图书馆ISBN插件终极指南

3分钟搞定Calibre图书信息自动化:国家图书馆ISBN插件终极指南 【免费下载链接】NLCISBNPlugin 基于中国国家图书馆ISBN检索的calibre的source/metadata插件。https://doiiars.com/article/NLCISBNPlugin 项目地址: https://gitcode.com/gh_mirrors/nl/NLCISBNPlug…

2026/7/7 5:55:39 阅读更多 →
小草助手口令野草助手

小草助手口令野草助手

小草助手口令野草助手

2026/7/7 5:55:39 阅读更多 →
企业试用期合同管理的8个高频雷区与合规操作手册

企业试用期合同管理的8个高频雷区与合规操作手册

试用期是企业和员工互相了解的"缓冲期",但这个缓冲期同时也是劳动争议的高发区。很多企业管理者和HR误以为试用期是企业说了算的"观察期",可以随便定规则、随便辞人,却不知道试用期恰恰是劳动法律监管最严格的阶段之一。…

2026/7/7 5:55:39 阅读更多 →
行业科普:互联网全媒体广告代理的市场空间与盈利逻辑

行业科普:互联网全媒体广告代理的市场空间与盈利逻辑

一、市场刚需与行业基本面线上广告是数字营销体系的核心组成部分,如今已成为绝大多数企业的常规经营支出。从市场现状来看,规模不等的商家通常会按月度或季度制定广告投放预算,业务范围可覆盖全国市场,需求的普遍性支撑起了庞大的…

2026/7/7 5:53:39 阅读更多 →
FTC 框架详解:残差 RL、稠密奖励与人在环的真实世界机器人训练

FTC 框架详解:残差 RL、稠密奖励与人在环的真实世界机器人训练

FTC 框架详解:残差 RL、稠密奖励与人在环的真实世界机器人训练 先说结论FTC 通过残差 RL 将探索起点锁定在目标区域附近,大幅降低真实世界交互次数需求。基于关键帧的可供性稠密奖励比 VLM 推理更轻量、实时,但依赖示教数据质量。人类干预窗口…

2026/7/7 5:51:39 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻