<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>守护进程 on CAO ZUOHUA</title><link>https://caozuohua.github.io/tags/%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/</link><description>Recent content in 守护进程 on CAO ZUOHUA</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 14 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caozuohua.github.io/tags/%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>理解 Linux 进程：信号机制与守护进程的生与死</title><link>https://caozuohua.github.io/posts/2026-09-14-linux-signals/</link><pubDate>Mon, 14 Sep 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-09-14-linux-signals/</guid><description>&lt;h1 id="理解-linux-进程信号机制与守护进程的生与死"&gt;理解 Linux 进程：信号机制与守护进程的生与死&lt;/h1&gt;&#10;&lt;p&gt;在 Linux 系统中，进程是资源分配和调度的主体。理解进程的运行状态、如何终止以及如何实现优雅的重启，是保障服务高可用的基石。&lt;/p&gt;&#10;&lt;h2 id="进程的生命周期"&gt;进程的生命周期&lt;/h2&gt;&#10;&lt;p&gt;进程从 &lt;code&gt;fork()&lt;/code&gt; 开始，经历运行、睡眠、僵尸 (Zombie) 等状态。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;运行状态 (R)&lt;/strong&gt;：正在 CPU 上执行或在运行队列中等待。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;睡眠状态 (S/D)&lt;/strong&gt;：等待某种事件发生（如 I/O 完成）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;僵尸状态 (Z)&lt;/strong&gt;：进程已终止但尚未被父进程回收，占用了进程描述符 (PID)。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="信号-signals进程间的紧急通信"&gt;信号 (Signals)：进程间的“紧急通信”&lt;/h2&gt;&#10;&lt;p&gt;信号是 Linux 中一种异步通知机制，用于通知进程发生了特定事件。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;信号&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;名称&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;作用&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;SIGTERM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;终止信号&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;请求进程优雅退出，允许进程清理资源&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;SIGKILL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;强制杀死&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;立即终止进程，进程无法捕获或忽略&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;SIGHUP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;终端挂起&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;常用于通知守护进程重新加载配置文件&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="优雅退出的艺术"&gt;优雅退出的艺术&lt;/h2&gt;&#10;&lt;p&gt;许多线上事故源于不当的进程终止方式。&lt;/p&gt;&#10;&lt;h3 id="1-为什么拒绝-kill--9"&gt;1. 为什么拒绝 &lt;code&gt;kill -9&lt;/code&gt;？&lt;/h3&gt;&#10;&lt;p&gt;强制使用 &lt;code&gt;SIGKILL&lt;/code&gt; 会打断进程正在进行的事务（如数据库写入），导致数据不一致或内存溢出。&lt;/p&gt;&#10;&lt;h3 id="2-优雅终止流程"&gt;2. 优雅终止流程&lt;/h3&gt;&#10;&lt;p&gt;守护进程应捕获 &lt;code&gt;SIGTERM&lt;/code&gt; 信号：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;停止接收新请求。&lt;/li&gt;&#10;&lt;li&gt;处理完当前正在进行的任务。&lt;/li&gt;&#10;&lt;li&gt;释放已申请的 socket、数据库连接。&lt;/li&gt;&#10;&lt;li&gt;进程退出。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 推荐做法：首先发送 SIGTERM&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kill &amp;lt;PID&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 等待几秒后，如果进程依然存在，再视情况决定是否强制清除&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# (但尽量避免直接使用 kill -9)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="运维场景"&gt;运维场景&lt;/h2&gt;&#10;&lt;p&gt;在生产环境中，部署新的配置后，通常通过发送 &lt;code&gt;SIGHUP&lt;/code&gt; 信号触发服务的“平滑重启”，实现零停机部署：&lt;/p&gt;</description></item></channel></rss>