在 Linux 中,“进程自动重启”通常不是内核自发行为,而是由某种机制在进程退出后重新拉起它。常见原因可分为以下几类:
如果进程是通过 systemd 管理的:
[Service]
Restart=always
Restart=on-failure
那么进程退出后会被自动重启。
查看是否由 systemd 管理:
systemctl status 进程名
常见配置含义:
Restart=always:无论什么原因退出都重启Restart=on-failure:非 0 退出码或信号终止时重启Restart=no:不重启[program:xxx]
autorestart=true
进程挂掉后 supervisord 会自动拉起。
检查:
supervisorctl status
docker run --restart=always
restartPolicy: Always
容器主进程退出后会被重启。
常见写法:
while true; do
./my_program
sleep 1
done
或 crontab:
* * * * * pgrep my_program || /path/my_program
有些程序:
exit() 后由父进程重启表现为:
dmesg | grep -i oom
若由 systemd/supervisor 管理,会立即重启。
crontab -l
systemctl list-timers
如:
ps -o pid,ppid,cmd -p 进程PID
1:可能被 systemd 拉起journalctl -u 服务名
dmesg
/var/log/messages
/var/log/syslog
cat /proc/进程PID/cmdline
systemctl list-units --type=service
Linux 进程“自动重启”,本质是:有东西在它退出后重新启动了它,而不是 Linux 内核自动重启进程。
如果你愿意,可以告诉我:
Restart= 或 --restart我可以帮你精准判断是哪一种情况。