在Linux中,进程“停止”通常有多种原因,需要结合具体场景分析。以下是常见原因及排查思路,按使用频率排序:
SIGSTOP:不可捕获、不可忽略,强制暂停SIGTSTP:一般由 Ctrl + Z 触发表现
[1]+ Stopped your_command
查看状态
ps -eo pid,state,cmd | grep your_process
T:停止(stopped)Tl:多线程停止恢复
kill -CONT PID
# 或
fg
main() 返回exit() / _exit()状态
ps aux | grep your_process
# 不存在
查看退出码
echo $?
常见信号:
SIGKILL (9):强制杀死SIGTERM (15):默认 killSIGSEGV (11):段错误SIGABRT (6):abort查看是否被杀死
dmesg | tail
journalctl -xe
如果是 SIGKILL
kill -9系统内存耗尽,内核杀进程
查看
dmesg | grep -i oom
特征
Out of memory: Kill process进程并未“死”,而是阻塞
常见原因:
状态
ps -eo pid,state,wchan,cmd
D:不可中断睡眠(通常 I/O)S:可中断睡眠进程已退出,但父进程未回收
状态
ps aux | grep Z
特点
查看
systemctl status your_service
journalctl -u your_service
ps -eo pid,state,cmd | grep your_process
dmesg | tail -50
journalctl -xe
strace -p PID
top
free -h
| 状态 | 含义 |
|---|---|
| R | 运行中 |
| S | 睡眠(可中断) |
| D | 不可中断睡眠 |
| T | 停止 |
| Z | 僵尸 |
| X | 死亡 |
如果你愿意,可以告诉我:
ps 中看到的状态我可以帮你精确定位是哪一种原因。