8.1嵌入式作业(进程)

作业内容

  1. 创建一个孤儿进程
  2. 创建一个僵尸进程

1. 孤儿进程主函数

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, const char *argv[])
{
	pid_t pid = fork(); 		//创建子进程
	if(pid > 0)
	{
		sleep(2); 		//父进程休眠两秒后退出
		printf("Parent process is ready to exit.\n");
		exit(0);
	}
	else if(0 == pid)
	{
		pid_t ppid;
		while(1) 		
		{
			if((ppid=getppid())==1) 	//若父进程进程号为1,则子进程为孤儿进程
			{
				printf("orphan process,pid = %d, ppid = %d\n",getpid(),ppid);
			}
			else
			{
				printf("child process,pid = %d, ppid = %d\n",getpid(),ppid);
			}
			sleep(1); 		//每隔一秒打印一次子进程信息
		}
	}
	else
	{
		perror("fork");
		return -1;
	}
	return 0;
}

测试孤儿进程

在这里插入图片描述
从图上可以看出,程序执行两秒后,父进程退出,子进程因此成为了孤儿进程。
在程序进行时,可以在终端输入ps -ajx指令查看进程状态,下图是在父进程退出前,也就是程序开始后两秒内的进程状态。
请添加图片描述
可以看到此时./a.out的父进程子进程都在正常运行着,且两个进程都处于阻塞态,接下来看看父进程退出后的进程状态。
请添加图片描述
可以看到子进程还存在,且它的父进程进程号为1,说明该子进程已经变成了孤儿进程。

2.僵尸进程主函数

#include <stdio.h>
#include <stdlib.h>
#include <syspes.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
	pid_t pid = fork(); 		//创建子进程
	if(pid > 0)
	{
		while(1) 		//父进程循环打印进程信息
		{
			printf("Father process, pid = %d\n",getpid());
			sleep(1);
		}
	}

	else if(0 == pid)
	{
		printf("Child process, pid = %d, ppid = %d\n",getpid(),getppid());
		printf("Child process is ready to exit.\n");
		exit(0); 		//子进程退出
	}

	else
	{
		perror("fork");
		return -1;
	}
	
	return 0;
}

测试僵尸进程

在这里插入图片描述
从上图可以看出,子进程打印了一次信息之后就退出了程序,只剩下父进程一直循环打印信息,在手动关闭父进程之前,我执行了ps -ajx指令查看进程状态,结果如下:
在这里插入图片描述
可以看到子进程状态为Z+,其中Z代表Zombie即僵尸进程,+代表输出在前端。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值