LabHub
学习 学习路径 课程

Linux 基础

信号:能抓住的,和抓不住的

在 LabHub 中继续学习

一句话总结

信号是发送给进程的通知,只有 SIGKILL 与 SIGSTOP 不能捕获、阻塞或忽略。正常停止应先发送 SIGTERM,宽限期后才使用 SIGKILL。

进程“不退出”可能是正在清理、处于不可中断的 D 状态、已经成为僵尸,或容器 PID 1 未转发信号。僵尸已结束,应由父进程回收;D 状态须修复底层 I/O。容器应使用 exec 形式或 init 正确转发和回收。

强制终止会跳过缓冲区刷新、锁释放和事务清理。服务收到终止信号后应停止接收新请求、完成在途工作,再退出。诊断时先检查捕获/忽略掩码、进程状态和父子关系。

概念图: 一句话总结 · 原文中的命令与标识符

原文中的命令与标识符

cat /proc/<pid>/status | grep -E 'SigBlk|SigIgn|SigCgt'
ps -eo pid,stat,wchan:20,cmd | awk '$2 ~ /D/'
timeout -s TERM -k 30s 5m ./worker    # TERM 뒤 30초 안에 안 끝나면 KILL

kill

kill -9

docker stop

TimeoutStopSec

timeout -k 10 30 명령

wait

128 + 시그널 번호

CMD myapp

/bin/sh -c

CMD ["myapp"]

pkill -f

pgrep -a -f

kill -9 -1

sleep 300

sleep 300 & wait $!

kill

SIGTERM

SIGKILL

ps

D

Z

--init

tini

SIGTERM

SIGINT

kill -- -<pgid>