僵尸进程是Linux系统中已经终止但仍在进程表中保留条目的进程。它们通常不会占用系统资源(除了少量的进程表空间),但大量僵尸进程可能表明程序存在问题。
ps aux | grep 'Z'
# 或者
top # 查看Z状态的进程
首先尝试发送SIGTERM信号给父进程:
kill -15 <父进程PID>
如果无效,可以尝试SIGKILL:
kill -9 <父进程PID>
如果父进程不处理子进程的退出状态,可以尝试:
kill -9 <父进程PID>
这会使僵尸进程被init进程(pid 1)接管,init会定期清理僵尸进程。
gdb -p <父进程PID>
# 在gdb中执行:
(gdb) call waitpid(<僵尸进程PID>, 0, 0)
(gdb) detach
(gdb) quit
systemctl restart <服务名>
如果问题持续存在,建议检查产生僵尸进程的应用程序代码,确保它正确调用了wait()或waitpid()系统调用。