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

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

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

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
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 <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值