温馨提示×

linux进程为何突然消失

小樊
33
2026-09-09 13:25:59
栏目: 智能运维

Linux 进程“突然消失”通常不是无缘无故的,而是被某种机制终止(kill)主动退出了。下面按常见原因 → 排查方法来说明。


一、最常见原因

1️⃣ 被 OOM Killer 杀掉(内存耗尽)

现象

  • 进程毫无征兆消失
  • 系统可能变卡一下
  • 多见于 Java、数据库、缓存类进程

排查

dmesg | egrep -i "oom|killed"

journalctl -k | grep -i oom

特征

Out of memory: Kill process 12345 (xxx)

✅ 解决方向:

  • 加内存
  • 限制进程内存(cgroup / systemd)
  • 调优应用

2️⃣ 被信号杀死(SIGKILL / SIGTERM)

可能来源

  • kill -9
  • 运维脚本
  • systemd / supervisor
  • 容器平台(K8s)

排查

journalctl -u 服务名

ausearch -m ANOM_KILL

3️⃣ 进程自己崩溃(Segmentation Fault / 异常)

现象

  • 日志中有 core dumped
  • 进程退出码非 0

排查

echo $?

常见退出码:

  • 139 → SIGSEGV
  • 134 → SIGABRT

查看 core:

ulimit -c
coredumpctl list

4️⃣ 父进程退出(孤儿 / 被回收)

现象

  • 子进程随父进程一起没了
  • 常见于 shell 脚本、nohup 用错

错误示例

ssh host "app &"   # 断开即死

✅ 正确方式:

nohup app &
disown

setsid app

5️⃣ systemd / 容器限制

systemd

  • Restart=no
  • MemoryMax 超限
  • TimeoutStopSec

查看:

systemctl show 服务名 | grep -i memory

容器

  • OOM
  • liveness probe 失败
  • docker stop

6️⃣ 被安全机制杀掉

  • SELinux
  • AppArmor
  • seccomp

排查:

ausearch -m AVC
journalctl | grep -i denied

二、快速定位 checklist

# 1. 是否 OOM
dmesg | grep -i oom

# 2. 是否异常退出
journalctl -xe

# 3. 进程退出码
echo $?

# 4. 是否被父进程带走
ps -o pid,ppid,cmd -p 进程号

# 5. 是否被 systemd 管理
systemctl status 服务名

三、如果你能补充这些信息,我可以精准判断

  1. 进程类型(Java / C++ / Python / 脚本)
  2. 是否容器 / K8s
  3. 是否有日志
  4. dmesgjournalctl 相关输出

告诉我这些,我可以直接帮你定位“到底是谁杀的”。

0