Linux怎么查看进程的各种信号处理

云婷吖_5912

云婷吖_5912

2026-06-30

610人浏览

原创

ps命令可查看进程信号注册状态,如sigcatch(捕获)、sigign(忽略),而/proc/pid/status提供sigpnd(挂起)、sigblk(阻塞)、sigcgt(捕获)等十六进制位图,strace -e signal则实时观察信号是否真正递达。

linux怎么查看进程的各种信号处理

用 ps 查看进程当前信号处理状态

ps 能直接显示进程对哪些信号设置了忽略、捕获或默认处理,但只反映当前注册的 handler 状态,不体现是否被屏蔽或挂起。

  • 运行 ps -p <pid> -o pid,comm,sig,sigcatch,sigign</pid>:其中 sig 是被阻塞(blocked)的信号位图(十六进制),sigcatch 列出已注册 handler 的信号(如 2,10,12),sigign 列出明确忽略的信号(如 17,19)
  • 注意:sig 字段是阻塞掩码,不是 pending 信号;它和 /proc/<pid>/status</pid> 中的 SigBlk 对应,但格式不同(ps 用十进制位图,/proc 用十六进制)
  • 如果某信号既不在 sigcatch 也不在 sigign,说明走默认动作(比如 SIGTERM 默认终止)

用 /proc/<pid>/status</pid> 查信号位图细节

内核最权威的信号状态来源,能区分 pending / blocked / caught 三类状态,但需手动解析位图。

  • 执行 cat /proc/<pid>/status | grep -E "SigPnd|SigBlk|SigCgt"</pid>
  • SigPnd:挂起(pending)信号位图,表示已发送但尚未递达(比如被阻塞中)
  • SigBlk:当前被屏蔽(blocked)的信号位图,对应 sigprocmask() 设置
  • SigCgt:已注册 handler 的信号位图(即 signal() 或 sigaction() 设置过)
  • 所有字段都是 64 位十六进制数(如 0000000000000000),低位对应信号 1(SIGHUP),高位对应信号 64;普通信号只用低 32 位

用 strace -e signal 实时观察信号递达行为

这是唯一能确认「信号是否真被进程收到并处理」的方法,适用于调试 handler 是否生效、是否被屏蔽拦截。

Browser Setup (No-Root Linux)
Browser Setup (No-Root Linux)

在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...

下载
  • 运行 strace -p <pid> -e trace=signal</pid>,进程一收到信号就会打印类似 --- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_USER, si_pid=12345, si_uid=1000} ---
  • 若全程无输出,说明信号根本没递达——可能是被屏蔽(SigBlk 中该位为 1),也可能是发错 PID 或权限不足
  • 加 -f 可跟踪子进程;用 strace -e signal=SIGUSR1 只过滤特定信号
  • 注意:strace 本身会干扰信号传递路径(比如某些信号会被 strace 截获),仅用于诊断,勿用于生产环境长期挂载

用 kill -l 和 man 7 signal 查信号编号与默认动作

很多问题源于搞错信号编号或误判默认行为,必须交叉验证。

  • kill -l 输出信号名与编号映射,但注意:SIGUSR1 是 10(非 1),SIGRTMIN 起才是实时信号(34+)
  • man 7 signal 明确列出每个信号的默认动作(Term、Ign、Core、Stop 等),比如 SIGCHLD 默认 Ign,SIGPIPE 默认 Term
  • 不要依赖记忆:SIGHUP 编号是 1,但某些旧系统可能重定义;始终以 kill -l 输出为准
  • 若自定义 handler 后行为异常,先查手册确认该信号是否允许忽略(如 SIGKILL 和 SIGSTOP 不可捕获也不可忽略)

信号状态分散在多个地方,ps 看注册、/proc/<pid>/status</pid> 看位图、strace 看实际递达——缺一不可。最容易被忽略的是 SigPnd 和 SigBlk 的关系:一个信号在 SigPnd 中出现,同时也在 SigBlk 中置位,就说明它卡住了,永远无法触发 handler。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux linux信号处理

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3830

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3293

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2413

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5810

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5462

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3233

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2725

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2939

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习