首先需明确进程异常的具体表现(如崩溃、停止响应、僵尸进程等),可通过以下命令收集信息:
ps aux | grep <进程名>
或pgrep <进程名>
确认进程是否在运行。若进程不存在,则需进一步恢复;若进程存在但无响应,可能需要重启。journalctl -u <服务名>
(Systemd服务)或tail -f /var/log/<服务名>.log
(应用日志)查看崩溃原因(如内存溢出、依赖缺失、配置错误)。若进程因临时故障停止,重启是最直接的恢复方式:
sudo systemctl restart <服务名>
(如httpd
、mysql
)重启服务;重启前可添加--force
参数强制重启(慎用)。/usr/local/app/myapp
),使用sudo <可执行文件路径>
手动启动。若进程处于Z(僵尸)状态(已终止但未被父进程回收),需清理父进程:
ps aux | grep 'Z'
,记录其PID(进程ID)。pstree -p <僵尸PID>
或ps -o ppid= -p <僵尸PID>
,得到父进程PPID。kill <PPID>
),若无效则强制终止(kill -9 <PPID>
),父进程重启后会自动回收僵尸进程。为避免进程频繁崩溃,可使用以下工具实现自动恢复:
sudo yum install supervisor -y
;/etc/supervisor/conf.d/<服务名>.conf
,添加[program:<服务名>]
段(指定command
、autostart
、autorestart
等参数);sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start <服务名>
。sudo vim /etc/systemd/system/<服务名>.service
,内容包含[Unit]
(描述)、[Service]
(ExecStart
启动命令、Restart=always
自动重启)、[Install]
(WantedBy=multi-user.target
);sudo systemctl daemon-reload && sudo systemctl enable <服务名> && sudo systemctl start <服务名>
。若进程频繁崩溃,需深入排查原因:
ulimit -a
查看系统资源限制(如内存、文件描述符),若不足可编辑/etc/security/limits.conf
调整。core
文件(位于/var/lib/systemd/coredump/
或当前目录),使用gdb <可执行文件> <core文件>
分析崩溃堆栈,定位代码问题。top
、htop
、glances
等工具实时监控CPU、内存、磁盘I/O,及时预警资源瓶颈。kill -9
)可能导致数据不一致,建议先尝试正常终止(kill <PID>
);sshd
),重启前需评估影响范围,避免影响其他用户。