僵尸进程(Zombie Process):
僵尸进程是指已经终止,但仍然保留在进程表中的进程。当一个子进程结束运行时,它的进程描述符仍然保留在系统中,直到父进程通过调用 wait()
或 waitpid()
函数来回收它。如果父进程没有及时回收子进程,子进程就会变成僵尸进程。
孤立进程(Orphan Process):
孤立进程是指其父进程已经终止,但子进程仍在运行的进程。当父进程终止时,操作系统会自动将子进程的父进程设置为 init
进程(进程ID为1)。这样,init
进程会负责回收这些孤立进程的资源。
僵尸进程的优势:
孤立进程的优势:
类型:
僵尸进程的应用场景:
孤立进程的应用场景:
init
进程,以确保子进程能够正常运行。僵尸进程问题:
wait()
或 waitpid()
函数来回收子进程。init
进程来回收。#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.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
进程作为默认父进程,通过设置 SIGHUP
信号处理程序来处理父进程终止的情况。#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void sig_hup(int signo) {
printf("Parent process terminated, cleaning up...\n");
exit(0);
}
int main() {
signal(SIGHUP, sig_hup); // 设置 SIGHUP 信号处理程序
pid_t pid = fork();
if (pid == 0) {
// 子进程
while (1) {
sleep(1);
}
} else if (pid > 0) {
// 父进程
exit(0);
} else {
perror("fork");
exit(1);
}
return 0;
}
领取专属 10元无门槛券
手把手带您无忧上云