当前位置: 首页 > news >正文

linux常见故障 实用故障系列文章-2获取挂掉的进程pid

在 Linux 中,当进程挂掉(崩溃或被杀死)时,可以通过以下几种方式获取其 PID(进程 ID),具体方法取决于进程是如何退出的。以下是详细的排查手段:


1. 通过系统日志获取挂掉的 PID

(1) 检查 dmesg(内核日志)

如果进程是被 OOM Killer 杀死的,内核会记录:

dmesg | grep -i "killed process"

输出示例:

[12345.678] Out of memory: Kill process 1234 (nginx) score 30 or sacrifice child

这里 1234 就是被杀的 PID。

(2) 检查 journalctl(systemd 日志)

如果进程是 systemd 管理的服务:

journalctl -xe | grep -A 20 "died"  # 查看服务崩溃日志
journalctl -u nginx --no-pager | grep "exit"  # 查看特定服务的退出记录

(3) 检查 /var/log/messages/var/log/syslog

grep -i "segfault" /var/log/syslog      # 段错误崩溃
grep -i "killed" /var/log/messages     # 被 OOM Killer 杀死

2. 通过 pspgrep 检查僵尸进程

如果进程崩溃但未完全退出(变成 僵尸进程,状态 Z):

ps aux | grep -w Z  # 查找僵尸进程

如果进程完全退出,但想找 最近运行过的进程

pgrep -l -f "进程名"  # 查找最近运行的进程(如 pgrep -l -f "python")

3. 通过 coredumpctl(systemd 系统)获取崩溃的 PID

如果进程崩溃并生成了 core dump,可以用:

coredumpctl list  # 列出所有 core dump 记录

输出示例:

TIME                        PID  UID  GID SIG PRESENT EXE
Wed 2023-01-01 12:00:00 EST 1234 1000 1000 11  *       /usr/bin/nginx

这里 1234 就是崩溃时的 PID。


4. 通过 auditd(审计日志)监控进程退出

如果系统安装了 auditd,可以记录进程退出事件:

sudo auditctl -w /bin/bash -p x -k process_exit  # 监控 bash 进程退出
sudo ausearch -k process_exit | grep "pid="      # 查找退出的 PID

5. 通过监控工具实时捕获崩溃进程

(1) systemd 服务监控

如果进程是 systemd 托管的服务,systemctl status 会显示退出码和 PID:

systemctl status nginx | grep "Main PID"  # 查看最后一次运行的 PID

(2) supervisor 进程管理

如果使用 supervisor,它会记录子进程的退出:

supervisorctl status
cat /var/log/supervisor/supervisord.log | grep "exited"

(3) strace 跟踪进程

strace -p <PID>  # 跟踪运行中的进程(如果崩溃会显示信号,如 SIGSEGV)

6. 如何预防 PID 丢失?建立监控体系

如果希望长期监控进程崩溃,可以:

  1. 启用 systemd 自动重启Restart=on-failure
  2. 使用 supervisor 管理关键进程(自动记录崩溃事件)
  3. 部署 Prometheus + Grafana 监控进程存活状态
  4. 编写脚本监控关键进程(示例):
    #!/bin/bash
    if ! pgrep -f "my_process"; thenecho "Process died! Last PID: $(cat /var/run/my_process.pid)" >> /var/log/crash.logsystemctl restart my_process
    fi
    

总结:如何获取挂掉的 PID?

方法适用场景命令示例
dmesgOOM Killer 杀死进程dmesg | grep -i "killed"
journalctlsystemd 托管服务崩溃journalctl -xe | grep "exit"
coredumpctl进程崩溃生成 core dumpcoredumpctl list
ps/pgrep查找僵尸进程或最近运行的进程ps aux | grep -w Z
auditd审计进程退出事件ausearch -k process_exit
supervisor托管进程崩溃记录supervisorctl status

如果 PID 经常丢失,建议:

  1. 启用 core dumpulimit -c unlimited
  2. 使用进程管理工具(如 systemd / supervisor
  3. 部署监控告警(如 Prometheus + Alertmanager)
http://www.dtcms.com/a/325320.html

相关文章:

  • Linux kernel network stack, some good article
  • AI模型服务接入WAF防火墙
  • WebSocket-java篇
  • 有序矩阵中第K小的元素+二分查找
  • 矩阵游戏(二分图最大匹配)
  • Spring Boot 菜单删除功能的实现与事务管理
  • 数据结构——树(02构造二叉树,代码练习)
  • 《解锁 C++ 进阶密码:引用补充与内联函数、nullptr 核心用法》
  • 爬虫与数据分析实战
  • Notepad++ 插件开发实战:从理念到落地的探索
  • libwebsockets 服务端获取过代理的真实连接IP
  • windows上RabbitMQ 启动时报错:发生系统错误 1067。 进程意外终止。
  • 编程技能:递归
  • leetcode 438. 找到字符串中所有字母异位词 -java
  • C语言:指针(3)
  • docker集群
  • 【图像处理基石】PCA图像压缩与还原:基于OpenCV的Lena图实验
  • 02Vue3
  • 想冲华为AI认证,怎么选方向?
  • 大模型落地:AI 技术重构工作与行业的底层逻辑
  • Selenium元素定位不到原因以及怎么办?
  • 编译Android版本可用的高版本iproute2
  • AI 健康管家:重构健康管理的未来图景
  • 大模型落地实践:从技术重构到行业变革的双重突破
  • AI生成代码时代的商业模式重构:从“软件即产品”到“价值即服务”
  • 亚马逊广告底层逻辑重构:从流量博弈到价值创造的战略升维
  • uView Pro 正式开源!70+ Vue3 组件重构完成,uni-app 组件库,你会选择它吗?
  • 数据库基本操作
  • 自动化备份全网服务器数据平台项目
  • 掘金数据富矿,永洪科技为山东黄金定制“数智掘金”实战营