【Linux取经路】探索进程状态之僵尸进程 | 孤儿进程
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid;
// 创建一个子进程
pid = fork();
if (pid < 0) {
// 如果fork失败,打印错误并退出
perror("fork failed");
exit(EXIT_FAILURE);
}
if (pid == 0) {
// 子进程
printf("子进程: 我是pid %d,我要死了\n", getpid());
// 子进程结束,成为僵尸进程
exit(EXIT_SUCCESS);
} else {
// 父进程
int child_status;
pid_t child_pid;
// 等待任何子进程结束
child_pid = wait(&child_status);
if (WIFEXITED(child_status)) {
// 子进程正常结束
printf("父进程: 我得到了子进程 %d 的结束状态 %d\n", child_pid, WEXITSTATUS(child_status));
} else {
// 子进程非正常结束(如收到信号导致)
printf("父进程: 子进程 %d 是非正常死亡\n", child_pid);
}
}
return 0;
}
这段代码首先通过fork()
创建一个子进程。子进程打印一条信息后调用exit()
结束,成为僵尸进程。父进程调用wait()
等待子进程结束,并根据子进程的结束状态打印相应的信息。这个过程展示了僵尸进程的产生,以及如何通过wait()
系统调用来处理僵尸进程。
评论已关闭