僵尸进程(Zombie Process)是指已经终止,但仍然保留在进程表中的进程。它们不再运行,但它们的父进程还没有调用 wait()
或 waitpid()
系统调用来收集它们的退出状态信息。僵尸进程会占用系统资源,如果大量存在,可能会导致系统性能下降。
wait()
或 waitpid()
。wait()
或 waitpid()
:父进程没有正确处理子进程的退出状态。可以使用 kill
命令结合 ps
命令来查找和清理僵尸进程。
# 查找僵尸进程
ps aux | grep 'Z'
# 杀死僵尸进程的父进程
kill -9 <父进程ID>
在父进程代码中添加 wait()
或 waitpid()
调用,以正确处理子进程的退出状态。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
exit(0);
} else if (pid > 0) {
// 父进程
wait(NULL); // 等待子进程结束
} else {
perror("fork");
exit(1);
}
return 0;
}
init
进程确保 init 进程(通常是 systemd
或 sysvinit
)正确处理孤儿进程。大多数现代 Linux 发行版已经配置好了这一点。
通过以上方法,可以有效管理和清理僵尸进程,保持系统的稳定性和性能。
领取专属 10元无门槛券
手把手带您无忧上云