Linux进程概念-2

在本文所在专栏的上一篇文章里,我们已经介绍过了什么叫做pcb,那么接下来我们需要对pcb一些的相关信息进行逐一介绍。

1.pcb中的描述信息

pcb中常见的描述信息:

  • pid--标识符
  • 内存指针:程序数据在内存中的地址;
  • 上下文数据:程序计数器…
  • 进程状态
  • IO信息
  • ……

我们便是根据如上:pcb中的描述信息来对操作系统中的进程来进行管理和调度。

2.进程状态

在了解进程状态之前,我们首先需要明白什么叫做状态。

状态其实就是当前进程的一种模式,状态会标记当前的进程该如何被操作系统进行调度处理,通俗来讲便是,状态标识了一个进程什么模式该做什么事情。

进程状态便是标记了一个程序运行的状态,让系统进行程序调度更加合理。

在Linux中的进程状态分为这五种:

  • 运行态-R:正在被执行,以及拿到时间片后即可就能执行的进程;
  • 前台进程-R+:占据一个终端的进程;
  • 后台进程:就是没有关联的进程;
  • 可中断休眠态-S:一种阻塞态,因为某种运行条件不满足,而暂时不能被调度运行的进程状态,比如sleep(3);
  • 不可中断休眠态-D:无法被中断打断阻塞,只能等待阻塞的唤醒条件满足后才能被调度执行;
  • 停止态-T:什么都不能做,不会被中断,不会被唤醒;
  • 僵尸态:进程退出运行,但是资源没有完全被释放,等待处理的一种状态。

对于僵尸态,我们做进行一步讨论,我们需要明报明白什么叫做僵尸进程。

僵尸进程:即是出处于僵尸态的进程,是一种退出了,但是资源没有完全被释放的进程。

当一个程序运行结束之后,我们需要了解程序功能完成的效果,这便是进程返回值的作用,即让我们清楚程序功能实现程度。

所以当一个进程结束之后,它也会存在结束原因,即一定的返回值。我们需要了解这个返回值的大小,因此这便需要在我们对程序结束原因处理之前,我们并不希望它的资源立马被释放。

这便是僵尸进程出现的原因,即我们需要了解进程的结束原因。所以进程退出之后,在它的家属进程处理之前,该进程所占据的资源并不能被释放。

只有被该进程的父进程处理之后,获取了退出返回值,它才能够释放资源。

这里我们介绍一个接口:pid_t fork(void) -- 通过复制调用进程(父进程),来创建一个新的进程(子进程)。返回值:在父进程中返回了子进程的pid(大于0);在子进程中年返回0;失败则返回-1。

来对上述内容进行一个展示。

 对于上述代码,“shi jie”的打印是2次,“ni hao”的打印只有1次,父子进程对应返回值的打印都各有1次。

这是有因为对于子进程而言,第一条打印语句虽然也存有,但是其赋值了程序计数器,所以只有下面创建子进程成功之后才会开始运行。

“shi jie”的打印为两次,是因为第二条打印语句被执行了两次,即两个进程都运行了这一句代码。

小结:

僵尸进程:是子进程先于父进程退出,为了保存退出原因,因此退出后资源没有完全释放成为了僵尸进程;

孤儿进程:是父进程先于子进程退出,子进程成为孤儿进程。

在了解僵尸进程之后,我们需要明白僵尸进程所存在的危害:资源泄露(资源没有完全被释放)。

该如何来避免这样的问题,做出的回答是“进程等待。”

进程等待:等待子进程退出,获取退出子进程的返回值,释放子进程资源,避免僵尸进程的产生。

因为僵尸进程存在的原因就是为了保存退出原因交给父进程,只有父进程获取了退出原因,资源才会被释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值