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 阅读更多 →

最新新闻

Kali与Metasploit实战:Slowloris慢速攻击原理、复现与防御

Kali与Metasploit实战:Slowloris慢速攻击原理、复现与防御

1. 项目概述:为什么选择Slowloris作为入门实战?如果你刚接触网络安全,或者对渗透测试和攻击原理充满好奇,那么“Slowloris攻击”绝对是一个绝佳的起点。它不像那些需要复杂工具链和深厚背景知识的漏洞利用,Slowloris的…

2026/7/7 6:51:51 阅读更多 →
深度解析Resources Saver:现代网页资源捕获与结构化保存的技术架构

深度解析Resources Saver:现代网页资源捕获与结构化保存的技术架构

深度解析Resources Saver:现代网页资源捕获与结构化保存的技术架构 【免费下载链接】ResourcesSaverExt Chrome Extension for one click downloading all resources files and keeping folder structures. 项目地址: https://gitcode.com/gh_mirrors/re/Resource…

2026/7/7 6:49:50 阅读更多 →
Burp Suite 2025.1新功能实测:自动暂停攻击与CSV导出协作数据

Burp Suite 2025.1新功能实测:自动暂停攻击与CSV导出协作数据

1. 项目概述:Burp Suite 2025.1 专业版新功能实测作为一名在Web安全测试领域摸爬滚打了十多年的老鸟,Burp Suite 对我来说就像吃饭用的筷子,熟悉到闭着眼睛都能摸清它的脉络。每次版本更新,我都会第一时间上手实测,看看…

2026/7/7 6:49:50 阅读更多 →
LTC6904与PIC24FJ256GB110构建高精度方波发生器方案

LTC6904与PIC24FJ256GB110构建高精度方波发生器方案

1. 项目背景与核心价值在嵌入式系统开发中,精确的时钟信号就像交响乐团的指挥家——它决定了整个系统的节奏和协调性。LTC6904这颗来自ADI的低功耗可编程振荡器芯片,配合PIC24FJ256GB110微控制器的强大处理能力,可以构建出频率精度达0.5%的方…

2026/7/7 6:45:50 阅读更多 →
许可证增购申请总被卡,管理层最想先看哪几项数据

许可证增购申请总被卡,管理层最想先看哪几项数据

摘要如果企业在没有完成使用分析的前提下就直接增购,往往会出现预算增加但利用率依旧偏低的情况。本文从高峰并发、模块结构、低效占用和历史趋势四个维度,分析为什么多数企业更适合先优化,再判断是否需要增购。 很多企业在 CAD、CAE、EDA 等…

2026/7/7 6:45:50 阅读更多 →
摩托车混流装配防错引导系统硬件怎么选?海雅达 Model 10X 工业三防平板电脑采购预算与部署成本评估

摩托车混流装配防错引导系统硬件怎么选?海雅达 Model 10X 工业三防平板电脑采购预算与部署成本评估

1. 摩托车混流装配的核心业务痛点与防呆控制难度在现代摩托车制造中,同一条总装流水线上通常处于跨骑、踏板、越野、纯电等多车型、多排量(125cc 至 800cc)的高度混流装配状态。一线操作工需要根据多变的车型工艺 BOM,装配不同的卡…

2026/7/7 6:45:50 阅读更多 →

日新闻

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

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

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

月新闻