Linux实现孤儿进程和僵尸进程

Linux实现孤儿进程和僵尸进程

孤儿进程:
子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。当一个父进程由于正常完成工作而退出或由于其他情况被终止,它的一个或多个子进程却还在运行,那么那些子进程将成为孤儿进程。为避免孤儿进程退出时无法释放所占用的资源而僵死,进程号为1的init进程将会接受这些孤儿进程,这一过程也被称为“收养”

#include 
#include 
#include 
#include 
int main() {
	pid_t pid;
	pid=fork();
	//如果子进程创建失败,直接返回,并打印fork函数错误
	if(pid==-1) {
		printf("fork err\n");	
		return 0;
	}
	//如果是子进程让子进程死循环执行命令
	if(pid==0) {
		while(1) {
			sleep(1);
			printf("hello world\n");
		}
	}
	//父进程直接死亡
	if(pid>0) {
		return 0;
	}
	return 0;
}

僵尸进程:
一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程

#include 
#include 
#include 
#include 
#include 
int main() {
	//使用fork函数复制出一个子进程
	pid_t pid=fork();
	//如果子进程创建失败,直接打印函数错误,返回
	if(pid==-1) {
		printf("fork err\n");
		return 0;
	}
	//如果是子进程,让子进程直接死亡
	if(pid==0) {
		return 0;
	}
	//如果是父进程,让父进程死循环执行命令,没有时间去释放子进程的pcb
	if(pid>0) {
		while(1) {
			sleep(1);
			printf("------hello world------\n");
		}
	}
	return 0;
}

你可能感兴趣的:(Linux)