简短回答:一般不能(或者说:单纯“重启”当然能让系统从头开始、僵尸进程随之消失,但“重启”并不是“清理僵尸进程”的推荐或根本手段;而且重启前如果僵尸还没被父进程处理,重启只是把整个系统状态清空了)。
下面说清楚原因和正确做法。
僵尸进程(zombie / <defunct>)是:
wait() / waitpid() 回收它它:
关键结论:
杀僵尸进程本身没用
必须处理它的父进程
ps aux | grep 'Z'
# 或
ps -ef | grep defunct
ps -o pid,ppid,stat,comm -p <僵尸PID>
systemctl restart 服务名
kill -TERM <PPID>
# 不行再
kill -9 <PPID>
注意:杀父进程可能影响业务,需谨慎
通常只在:
如果你愿意,可以贴一下:
ps -ef | grep defunct
我可以帮你判断该杀哪个父进程。