Linux SIGTERM 信号

Linux 进程管理:5种信号(SIGTERM/SIGKILL等)的适用场景与副作用对比 本文深入解析Linux进程管理中5种核心信号(SIGTERM、SIGKILL等)的应用场景与副作用对比,帮助开发者掌握从优雅终止到强制干预的实战策略。通过详细对比SIGTERM的优雅终止、SIGKILL的强制终止等特性,提供进程控制的专业解决方案,适用于服务器管理、后台服务维护等多种场景。 阅读详情

1. 什么是 SIGTERM

SIGTERM(Signal Terminate)是 Linux/Unix 系统中用于请求进程「正常终止」的信号,编号为 15。它的名字由 Signal 与 Terminate 组合而来,含义直白:通知目标进程「请你结束运行」。

与强制杀死进程的信号不同,SIGTERM 是一种可被捕获、可被忽略的礼貌性请求。进程收到 SIGTERM 后,有机会完成善后工作——例如保存数据、释放锁、关闭连接、记录日志——然后体面地退出。正因如此,SIGTERM 被视为系统管理员和运维人员「首选」的进程终止方式,也是 kill、docker stop、systemctl stop 等命令默认发出的信号。

2. 信号编号与默认动作

在 Linux 中,SIGTERM 的编号固定为 15。可以通过以下命令查证:

kill -l

输出中可以看到:

 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
...

SIGTERM 的默认动作是终止进程(Term)。如果进程没有显式捕获或忽略这个信号,内核会按照默认规则直接结束它。这也意味着:一个「什么都没处理」的普通进程,收到 SIGTERM 就会被干净地终止。

3. SIGTERM 与 SIGKILL、SIGINT 的区别

信号家族中,最常与 SIGTERM 混淆的是 SIGKILL(9)和 SIGINT(2),三者的差异非常关键:

信号编号能否捕获常见来源典型用途
SIGINT2可捕获终端 Ctrl+C交互式打断当前前台进程
SIGTERM15可捕获kill 命令、关闭脚本请求进程优雅终止(默认)
SIGKILL9不可捕获kill -9强制立即终止,不留给进程任何机会

理解要点:

  • SIGTERM 是「请求」:进程可以拒绝、延迟或自定义处理。
  • SIGKILL 是「命令」:由内核直接执行,进程完全无法感知、无法阻止。它只应在 SIGTERM 无效、进程僵死或资源无法释放时作为最后手段。
  • SIGINT 面向交互:Ctrl+C 发送的是 SIGINT,适合用户手动打断;SIGTERM 源自 kill 等命令,适合脚本、服务管理和容器编排。

日常运维的最佳实践是:先 SIGTERM,再观察,最后才 SIGKILL。

4. 如何发送 SIGTERM

最常用的方式是 kill 命令。因为 SIGTERM 是 kill 的默认信号,下面两种写法完全等价:

kill <PID>
kill -15 <PID>
kill -s TERM <PID>
kill -SIGTERM <PID>

也可以使用 pkill 按进程名发送:

pkill -TERM nginx

此外,docker stop 和 systemctl stop 在停止容器/服务时,默认首先发送的正是 SIGTERM,并留出一段宽限期(grace period)等待进程优雅退出,超时后才会升级为 SIGKILL。这正是 SIGTERM 在容器时代依然重要的原因。

5. 在程序中捕获并优雅处理 SIGTERM

写服务端程序时,正确处理 SIGTERM 是生产环境的必备修养。下面以几种常见语言为例。

5.1 C 语言

C 语言使用 signal() 或 sigaction() 注册处理函数。推荐使用更可靠的 sigaction:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

volatile sig_atomic_t stop = 0;

void handle_sigterm(int signo) {
    stop = 1;  // 仅置位标志,不在信号处理函数中做重活
}

int main(void) {
    struct sigaction sa;
    sa.sa_handler = handle_sigterm;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;

    sigaction(SIGTERM, &sa, NULL);

    while (!stop) {
        puts("working...");
        sleep(1);
    }

    puts("收到 SIGTERM,开始清理并退出");
    return EXIT_SUCCESS;
}

要点:信号处理函数中只做最轻量的操作(如设置标志位),真正的清理逻辑放在主循环里完成,避免重入问题。

5.2 Python

Python 通过 signal 模块注册处理函数。注意信号处理函数会在主线程执行,避免在其中做阻塞或复杂操作:

import signal
import time

should_exit = False

def handle_sigterm(signum, frame):
    global should_exit
    print("收到 SIGTERM,准备优雅退出")
    should_exit = True

signal.signal(signal.SIGTERM, handle_sigterm)

while not should_exit:
    print("working...")
    time.sleep(1)

print("清理资源,退出")

5.3 Go

Go 通过 channel 接收信号,编写优雅关闭非常自然:

package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
)

func main() {
    quit := make(chan os.Signal, 1)
    signal.Notify(quit, syscall.SIGTERM)

    go func() {
        <-quit
        fmt.Println("收到 SIGTERM,开始清理")
        // 关闭连接、保存状态等
        os.Exit(0)
    }()

    // 模拟持续运行
    select {}
}

5.4 Node.js

Node.js 通过监听 process.on('SIGTERM', ...) 实现:

process.on('SIGTERM', () => {
  console.log('收到 SIGTERM,优雅关闭中...');
  server.close(() => {
    console.log('HTTP 服务已停止监听');
    process.exit(0);
  });

  // 兜底:10 秒后仍未退出则强制结束
  setTimeout(() => process.exit(1), 10000).unref();
});

6. 优雅退出的实践清单

无论使用何种语言,处理 SIGTERM 的优雅退出逻辑通常包含以下环节,建议按顺序执行:

  1. 停止接收新请求:先让负载均衡摘除节点、HTTP 服务停止监听。
  2. 处理在途请求:等待已在处理中的请求完成,或设置合理的截止时间。
  3. 保存状态:落盘缓存、刷新日志、提交进行中的事务。
  4. 释放资源:关闭数据库连接、网络连接、文件句柄、释放分布式锁。
  5. 通知协作者:向注册中心注销服务、通知其他组件本实例即将下线。
  6. 退出进程:完成清理后调用 exit,并设置合适的退出码。

同时要避免两个常见陷阱:

  • 无限制等待:为退出流程设置超时(如 30 秒),超时后强制退出,防止「优雅退出」沦为「永远退出」。
  • 在信号处理函数中做重活:信号处理函数应尽量只做标记,复杂清理放到主流程或专门的退出协程中。

7. 交互式验证:以 sleep 为例tes 部署中的 SIGTERM

在容器化与云原生环境里,SIGTERM 是应用优雅下线链路的第一环。docker stop 与 Kubernetes 的 Pod 删除流程,本质都遵循同一套模式:先发 SIGTERM 请求退出 → 等待宽限期 → 超时后再 SIGKILL 兜底。

7.1 Docker:docker stop 的默认信号

docker stop <container> 会先向容器内 PID 1 进程发送 SIGTERM,并默认等待 10 秒;如果超时后容器仍未退出,Docker 才会发送 SIGKILL 强制结束。因此,只有容器的主进程真正捕获并处理 SIGTERM,优雅退出才可能发生。

可以使用 -t 参数调整宽限期:

docker stop -t 30 <container>

还可以在 Dockerfile 中显式声明停止信号:

STOPSIGNAL SIGTERM

一个非常常见的坑是 shell 形式 vs exec 形式:

# ❌ shell 形式:SIGTERM 发给 /bin/sh,业务进程可能收不到
CMD ./server

# ✅ exec 形式:业务进程直接作为 PID 1,能够收到 SIGTERM
CMD ["./server"]

如果主进程是 shell,它未必会向业务进程转发信号,导致容器总是耗尽宽限期后被 SIGKILL 强杀。必要时也可以引入 tini 或 dumb-init 作为 PID 1,既负责信号转发,又负责回收子进程。

exec 在 Linux shell 中的作用

exec 是 shell 内建命令,它的核心作用是:用指定程序替换当前 shell 进程本身,而不是像普通命令那样先 fork 出一个子进程再执行。执行 exec ./server 后,当前 shell 的 PID 保持不变,但进程映像已经被 ./server 覆盖;命令执行结束后也不会再“回到 shell”,因为 shell 本身已经不存在了。

这种“进程替换”机制在容器场景中有两个直接意义:

  • 减少中间进程层:Dockerfile 中的 exec 形式 CMD ["./server"] 让业务程序直接成为 PID 1,docker stop 发出的 SIGTERM 能直接到达业务进程。
  • 避免信号转发问题:shell 形式 CMD ./server 等价于 /bin/sh -c "./server",此时 PID 1 是 shell,业务进程只是它的子进程。docker stop 一般只向 PID 1 发送 SIGTERM,而 shell 未必会继续把信号转发给子进程,最终导致优雅退出失败。

因此,在 Docker、Kubernetes 或 systemd 这类“以主进程接收信号并完成清理”为假设的场景中,更推荐使用 exec 形式运行服务,让业务进程自己成为 PID 1、直接接收 SIGTERM。

一个必须注意的关键误区是:很多人以为 exec 只是“在脚本里运行一个程序,然后继续执行后面的代码”。这是错误的。一旦 Shell 执行了 exec java ...,Shell 进程本身就会被 java 替换,原 Shell 直接消失,因此脚本中 exec 后面的所有代码都不会再执行。

#!/bin/sh
exec java -jar app.jar
echo "这行永远不会执行"

上面脚本中,echo 这行永远没有机会运行:exec 已经把当前进程替换成 java,Java 启动后不会“返回”这个脚本继续往下走。这也是 exec 与普通命令最本质的区别——普通命令是 fork 子进程执行、父 Shell 继续往下走;而 exec 是原地替换,没有“之后”可继续。

7.2 Kubernetes:Pod 删除的优雅终止流程

当执行 kubectl delete pod、滚动更新或节点驱逐时,Kubernetes 按以下顺序终止 Pod:

  1. Pod 状态变为 Terminating。
  2. kubelet 向 Pod 内每个容器的主进程发送 SIGTERM。
  3. 进入 terminationGracePeriodSeconds 宽限期,默认 30 秒。
  4. 如果容器在宽限期内仍未退出,kubelet 发送 SIGKILL 强制结束。

对应的 YAML 配置如下:

spec:
  terminationGracePeriodSeconds: 30   # SIGTERM 到 SIGKILL 的宽限期
  containers:
    - name: app
      lifecycle:
        preStop:
          exec:
            command: ["/bin/sh", "-c", "sleep 5"]

实践要点:

  • 应用必须捕获 SIGTERM:否则 Pod 会一直悬在 Terminating 状态,直到宽限期耗尽才被 SIGKILL 杀死。
  • 配合 preStop hook:在收到 SIGTERM 前先执行摘流量、等待负载均衡更新端点等操作,给注册中心或 Service 一点缓冲时间。
  • 滚动更新时停止接收新流量:应用收到 SIGTERM 后应关闭 HTTP 监听、停止消费消息,但要继续处理已有请求。
  • 合理设置宽限期:让 terminationGracePeriodSeconds 大于应用实际清理所需时间,避免还未来得及善后就被强杀。

理解 Docker 与 Kubernetes 的这层机制后,编写容器化服务时会更有意识地做到:以 PID 1 直面 SIGTERM,在限时内完成优雅关闭。

8. 总结

SIGTERM 是 Linux 进程管理中「文明终止」的基石:

  • 它的编号是 15,默认动作是终止进程,但可被捕获处理。
  • 它重在给进程一个体面收尾的机会,是 kill、docker stop、systemctl stop 的默认信号。
  • 正确处理 SIGTERM 是编写健壮服务、构建优雅关闭(graceful shutdown)机制的核心。
  • 只有 SIGTERM 处理无效时,才应动用 SIGKILL 作为兜底。

掌握 SIGTERM,不只是记住一个信号的编号,更是理解进程生命周期、资源清理与生产可靠性之间的深刻联系。

Linux kill命令与信号机制详解:从SIGTERM到僵尸进程 在Linux运维中,进程管理是基础且频繁遇到的核心技能。kill命令看似简单,本质却是向进程发送信号,这是Unix进程间通信最古老的方式。信号并不总是“杀死”进程,不同的信号如SIGTERM(默认kill信号)与SIGKILL(即kill -9)有着截然不同的处理机制:SIGTERM允许进程捕获并优雅退出,适合服务重启;而SIGKILL由内核强制执行,常用于兜底。面对僵尸进程,kill -9无能为力,需要父进程调用wait回收;进程处于D状态时,信号递送会挂起,需先排查IO问题。此外,被systemd或su 阅读详情

相关推荐

Abaqus Linux中断问题:SIGTERM信号处理与实战解决方案

Abaqus在Linux环境下频繁出现'Killed'或'Terminated'中断,本质是POSIX信号机制与Fortran求解器设计之间的兼容性断层。SIGTERM作为作业调度器(如Slurm)默认发送的终止请求信号,在Abaqus中未被注册处理,导致进程强制退出、.odb文件损坏、重启失败等连锁问题。该现象集中爆发于大规模并行计算、长时隐式求解及CI/CD自动化批处理场景,与Windows平台无关,亦非单纯内存或模型配置问题。技术价值在于通过信号拦截、cgroup隔离、Fortran层钩子或Check

weixin_33282146的博客 40

什么是Linux SIGTERM信号以及与SIGKILL的区别

Unix and Linux like operating systems processes uses SIGNALS in order to communicate each other. For example If we can to kill a process we need to send a signal to process we want to kill. This signa...

cunjiu9486的博客 1万+

Linux进程自终止:SIGTERM信号处理与优雅退出实践指南

进程信号机制是Linux系统进程间通信的基础技术,通过信号传递实现进程控制与管理。其核心原理是操作系统内核向目标进程发送特定信号值,触发预设的信号处理函数执行。这一机制的技术价值在于确保系统资源的合理释放和程序状态的完整性维护,避免强制终止导致的数据丢失或资源泄漏问题。在服务器运维、自动化脚本、守护进程等应用场景中,SIGTERM信号处理成为实现优雅退出的关键技术。结合Shell脚本和Python等编程语言的热门应用,本文深入探讨进程自终止的实现方式,涵盖信号捕获、资源清理等实践要点,为开发人员提供可靠的技

weixin_31766003的博客 339

Linux SIGTERM信号-实验

在Ubuntu 24.04、JDK21和Docker环境下,通过ShutdownHookLogExample注册JVM钩子,验证SIGTERM触发优雅停机并记录日志。实验对比启动脚本:使用exec使Java进程成为容器PID1,信号直达JVM,钩子正常执行;不使用exec时,shell中间层可能阻碍信号传递。该实验验证了优雅停机机制与exec的关键作用。

modelmd的博客 463

Linux中的SIGTERM信号及其与SIGKILL信号的区别和信号处理

与SIGTERM不同,SIGKILL信号(信号编号为9)是一种无条件终止信号,用于强制终止进程。SIGKILL信号对于那些无法通过正常方式终止的进程非常有用,但它也可能导致进程在终止之前无法进行清理工作,从而可能导致数据丢失或资源泄漏。相比之下,SIGKILL信号是一种无法忽略的终止信号,它可以用于迫使进程立即终止,但可能无法进行清理操作。在信号处理方面,SIGTERM和SIGKILL是两个常见的信号,它们在进程管理和终止方面起着重要的作用。希望以上信息对你有所帮助!如有任何进一步的问题,请随时提问。

QqdwPhp的博客 1716

linux信号(15)——SIGTERM:进程世界里的“温馨提示“

Linux SIGTERM信号深度解析:从理论到实践 摘要:本文系统解析Linux中的SIGTERM信号机制,将其比喻为"温柔的进程终止请求"。不同于强制终止信号,SIGTERM允许进程执行清理操作后优雅退出。文章首先介绍其POSIX标准定位及相关头文件,重点剖析kill()和sigaction()等关键函数的参数与返回值。通过三个典型应用案例(包括基础信号捕获、服务管理应用和多进程资源清理),配合完整代码和流程图,详细演示SIGTERM的实际应用场景。最后以图示总结其工作流程,帮助开发

weixin_42108533的博客 1602

Linux关闭与切换进程相关的信号:SIGINT、SIGKILL、SIGTERM、SIGSTOP

参考 Linux中ctrl-c, ctrl-z, ctrl-d 区别 ctrl-d ( Terminate input, or exit shell ) 一个特殊的二进制值,表示 EOF,作用相当于在终端中输入exit后回车; ctrl-/ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件; ctrl-s 中断控制台输出; ctrl-q 恢复控制台输出; ctrl-l 清屏。 Linux命令kill和signal kill <pid> :

XindaBlack的博客 8844

告别手动操作!用Python脚本批量处理Siemens NX零件文件(导入/导出/移除参数)

本文详细介绍了如何利用Python脚本实现Siemens NX零件文件的批量处理,包括导入、导出和移除参数等操作。通过NX Open API和Python UF接口,工业设计师可以大幅提升工作效率,告别繁琐的手动操作。文章提供了完整的实战指南,涵盖环境配置、核心功能实现以及性能优化技巧,特别适合需要进行Siemens-NXUG二次开发的工程师参考。

weixin_28222493的博客 260

sigquit信号默认忽略吗_Linux信号SIGTERM、SIGKILL、SIGINT和SIGQUIT的区别

SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。但是SIGKILL信号不同,它可以被捕获和解释(或忽略)的过程。SIGKILL是发送到处理的信号以使其立即终止。当发送到程序,SIGKILL使其立即终止。在对比SIGTERM和SIGINT,这个信号不能被捕获或忽略,并且在接收过程中不能执行任何清理在接收到该信号。SIGINT中断信号,终端在用户按下C...

weixin_39714164的博客 1166

ROS教程(四):RVIZ使用教程(详细图文)

前言 根据前面的教程已经学会了创建功能包,那么本篇文章主要内容则是通过节点来发布数据至RVIZ

Leslie的博客 17万+

BGE-M3 文本情感分类实战:预训练模型微调,导出ONNX并测试

本文介绍了如何基于BGE-M3开源模型实现一个简单的二分类情感分析任务,展示了NLP中经典的“预训练 + 微调”范式。首先,加载预训练模型和分词器,并构建分类头整合到模型中。接着,进行数据预处理并构建DataLoader。然后,定义优化器、损失函数和训练循环,进行模型微调。微调过程中,可以选择基于[CLS] token的单特征提取或基于池化策略的多特征融合。最后,通过验证与推理评估模型性能,并导出ONNX模型以适应生产环境。BGE-M3在语义表征任务中表现优异,适合作为文本分类、语义搜索等下游任务的基础模型

大鹏的专栏 1403

Linux信号处理:SIGTERM的底层机制与应用控制

Linux信号处理:SIGTERM的底层机制与应用控制

xie__jin__cheng的博客 668

密码学:一文读懂数字证书

消息摘要算法用于验证数据完整性服务,对称加密算法和非对称加密算法用于保证数据保密性服务,数字签名算法用于抗否认性服务。数字证书集合了多种密码学算法:自身带有公钥信息,可完成相应的加密/解密操作;同时,还带有数字签名,可鉴别消息来源;且自身带有消息摘要信息,可验证证书的完整性;由于证书本身含有用户身份信息,因而具有认证性。

Shujie 2909

linux 信号 SIGINT SIGTERM SIGKILL区别

SIGINT SIGTERM SIGKILL区别 三者都是结束/终止进程运行。 1.SIGINT SIGTERM区别 前者与字符ctrl+c关联,后者没有任何控制字符关联。 前者只能结束前台进程,后者则不是。 2.SIGTERM SIGKILL的区别 前者可以被阻塞、处理和忽略,但是后者不可以。KILL命令的默认不带参数发送的信号就是SIGTERM.让程序有好的退出。因为它可以被阻塞,...

weixin_33973600的博客 331

【SOC估算】基于EKF与神经网络融合的锂电池SOC高精度估计及Matlab实现

本文探讨了基于EKF与神经网络融合的锂电池SOC高精度估计方法。通过结合扩展卡尔曼滤波(EKF)的模型驱动优势和神经网络的数据驱动学习能力,实现了对电池荷电状态(SOC)的精准预测。Matlab仿真验证了该混合算法在各种工况下均能显著降低估计误差,提升电池管理系统性能。

play7的博客 695

开源WorkBuddy实战课:从零搭建AI Agent办公自动化工作台

AI Agent作为大语言模型之上的智能体,正在重塑办公效率。它通过工具调用、任务规划与长期记忆,将被动问答升级为主动执行。WorkBuddy作为图形化智能体工作台,降低了搭建门槛,让非技术人员也可配置自动化流程。本文开源整套实战资料,涵盖JDK环境配置、模型接入、日报邮件处理、表格清洗、批量文档生成等场景,并讲解自定义指令、Skills扩展与MCP协议。从基础概念到工程实践,帮助读者快速上手,构建属于自己的办公自动化助手。

weixin_29083475的博客 224

Linux中与进程终止相关的信号SIGTERM,SIGKILL,SIGINT

1.      SIGTERM “kill pid” 会发送SIGTERM到进程pid. This is the termination signal sent by killcommand by default. 2.      SIGINT 在终端中敲入interrupt key(DELETE或ctrl+c)会产生SIGINT信号。这个信号会被发送到进程(inforeground p

hzgdiyer的专栏 1万+

AI在电商中的搜索优化

自拟标题 《AI技术助力电商搜索优化:深度解析一线大厂面试题及算法编程实践》 概述 随着人工智能技术的不断发展,AI在电商搜索优化中的应用日益广泛。本文将围绕“AI在电商中的搜索优化”这一主题,介绍国内头部一线大厂如阿里巴巴、百度、腾讯、字节跳动等在面试中常见的AI相关面试题和算法编程题,并提供详尽的答案解

AI天才研究院 912

Linux中,给Redis发送sigterm信号的两种方式,什么是sigterm信号?

在 Redis 中,SIGTERM 信号表示“请求进程停止”。因此,在大多数情况下,使用 SIGTERM 信号来停止 Redis 服务器是更好的选择。SIGTERM 信号是一种安全的信号,它允许进程有机会保存数据并关闭连接。

KissTooTrue的博客 799

【QNX+Android虚拟化方案】12 - 设备虚拟化 之 Passthrough透传、Vdev Trap、HAB Socket 原理解析

【QNX+Android虚拟化方案】12 - 设备虚拟化 之 Passthrough透传、Vdev Trap、HAB Socket 原理解析

|~~~热爱生活、努力学习的小伙汁~~~| 1371

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux进程信号与优雅停机:从SIGTERM到Spring Boot实践

进程信号是操作系统进行进程间通信的基础机制,通过向目标进程发送特定信号来实现控制。在Linux系统中,SIGTERM(15)信号允许进程进行资源清理后优雅退出,而SIGKILL(9)则会强制立即终止进程。合理使用进程信号能够避免数据不一致和资源泄漏问题,对于Java应用而言,ShutdownHook机制可以捕获停机信号并执行清理逻辑。Spring Boot框架进一步提供了server.shutdown=graceful配置,支持等待活跃请求完成的优雅停机方案。在实际的运维场景中,结合Supervisor或s

weixin_30431445的博客 295

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

linux信号 SIGINT SIGTERM SIGKILL

三者都是结束/终止进程运行。 1.SIGINT SIGTERM区别 前者与字符ctrl+c关联,后者没有任何控制字符关联。 前者只能结束前台进程,后者则不是。 2.SIGTERM SIGKILL的区别 前者可以被阻塞、处理和忽略,但是后者不可以。KILL命令的默认不带参数发送的信号就是SIGTERM.让程序有好的退出。因为它可以被阻塞,所以有的进程不能被结束时,用kill发送后...

417

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Linux信号大全:从SIGINT到SIGTERM,每个开发者都应该知道的信号处理技巧

本文全面解析Linux信号处理机制,从SIGINT到SIGTERM等关键信号的使用场景与处理技巧。深入探讨信号分类、默认行为及实战处理方法,包括用户自定义信号SIGUSR1/SIGUSR2的应用,帮助开发者编写更健壮的Linux应用程序。掌握这些信号处理技巧能有效避免进程意外终止等问题。

weixin_30576827的博客 438

Linux 操作系统 SIGTERM等信号意义

SIGHUP     终止进程     终端线路挂断 SIGINT     终止进程     中断进程 SIGQUIT   建立CORE文件终止进程,并且生成core文件 SIGILL   建立CORE文件       非法指令 SIGTRAP   建立CORE文件       跟踪自陷 SIGBUS   建立CORE文件       总线错误 SIGSEGV   建立CORE文件  

zhijun的专栏 1871

linux shell trap捕捉信号 附信号表 SIGTERM SIGKILL

trap捕捉信号有三种形式 第一种: trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例1 #!/bin/bash trap "echo 123" 15 while true do echo abc sleep 5 done 例2 #!/bin/bash trap "sh $0 123" 15 ...

whatday的专栏 3788

Linux信号机制全解:从SIGTERM到sigaction,服务端进程安全退出的底层逻辑

在Linux服务端与嵌入式开发中,进程生命周期管理是绕不开的基础课题,而信号(Signal)正是内核与进程之间最核心的异步通信机制。它像一封封“邮件通知”,在内核态返回用户态的间隙被派发,影响着进程的终止、暂停、恢复与异常处理。理解SIGTERM、SIGINT等常见信号的默认动作,掌握sigaction安全安装处理函数、标准信号与实时信号的排队差异、多线程下信号的投递规则,是构建健壮服务端程序的关键。通过将信号转换为文件描述符或专用线程同步处理,可规避printf、malloc在异步上下文中的死锁风险。本文

weixin_33507732的博客 247
上一篇: C 语言字符输入/输出:getchar、putchar 与缓冲区机制详解
下一篇: Linux SIGTERM信号-实验
Chengdu.S
博客等级 码龄9年 283粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chengdu.S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值