进程线程基础——制造孤儿进程与僵尸进程

本文介绍了孤儿进程和僵尸进程的概念。孤儿进程是指父进程在子进程之前结束,子进程被1号进程接管。通过示例代码展示了如何创建孤儿进程。而僵尸进程则是因子进程非正常结束,其进程描述符仍占用系统资源。示例中,父进程无限循环,子进程结束后成为僵尸状态。了解这些有助于优化进程管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:孤儿进程

所谓孤儿进程,就是父进程在子进程前结束,导致子进程挂载到了别的进程之下(一般是1号进程),也有可能因为图形化界面优化,导致不是1号进程充当“孤儿院”。

因为我们无法确定,是子进程先执行还是父进程先执行,故,可以让子进程先睡1秒,跳过时间片

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main(int argc, const char *argv[])
{
	//融合召唤子进程
	pid_t pid = fork();
	
	//使用父进程
	if(pid > 0)
	{
		printf("孤儿闪亮登场,这是父进程\n");
		printf("父进程自身id:%d,子进程id:%d\n",getpid(), pid);
	}
	else
	{
		sleep(2);     //睡两秒,父进程完成,变成孤儿
		printf("I am 孤儿\n");
		printf("子进程自身id:%d, 父进程:%d\n", getpid(), getppid());
	}
	return 0;
}

运行结果如下:

 

 2:僵尸进程

因为子进程非正常结束,导致空壳占据了进程位置,无人”收尸“,故化作僵尸

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main(int argc, const char *argv[])
{
	pid_t pid = fork();
	while(1)
	{
		if(pid == 0)
		{
			exit(0);    //用exit结束子进程
		}else
		{
			printf("这里是父进程,进程号:%d\n",getpid());   //用死循环保证父进程不结束
			sleep(3);
		}
	}
	return 0;
}

 

 这个z+代表僵尸进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老K殿下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值