Linux 进程“自动退出”是一个很常见的问题,但原因可能多种多样。下面按最常见 → 较少见的顺序,系统梳理一下可能原因和排查方法。
很多情况下并不是“被杀死”,而是:
main() 执行完 returnexit() / _exit()✅ 排查:
echo $?
0:正常退出0:程序自行返回错误码nohup / 后台守护,终端关闭导致退出如果你是这样启动的:
./app &
然后关掉终端,进程可能收到 SIGHUP 退出。
✅ 解决:
nohup ./app &
# 或
setsid ./app &
# 或
disown
常见信号:
SIGTERM (15):正常终止SIGKILL (9):强制杀SIGSEGV (11):段错误SIGABRT (6):断言失败SIGPIPE (13):写已关闭的管道✅ 查看死因:
dmesg | tail
或
journalctl -xe
如果是自己写的程序:
ulimit -c unlimited
生成 core 文件后用 gdb 分析。
Linux 在内存不足时会杀进程(OOM Killer)。
✅ 检查:
dmesg | grep -i oom
或
journalctl | grep -i "killed process"
典型日志:
Out of memory: Kill process 12345 (app)
✅ 建议:
try/except / signal 处理例如:
✅ 排查:
ldd 你的程序
strace -f ./app
如果是 systemd 服务:
Restart=no
或:
MemoryMax=100M
容器里:
memory limitliveness probe 失败✅ 查看:
systemctl status your.service
journalctl -u your.service
init 接管(一般不会死)如:
cronsupervisork8s# 1. 查看退出码
echo $?
# 2. 是否被信号杀
dmesg | tail
journalctl -xe
# 3. 是否被 OOM
dmesg | grep oom
# 4. 是否 core dump
ulimit -c
ls core*
# 5. 系统调用层面
strace -f ./app
如果你愿意,可以告诉我:
我可以直接帮你定位具体原因。