当前位置: 首页 > news >正文

怎么做网站交易营销网站搭建

怎么做网站交易,营销网站搭建,免费网页设计网址,贵港网站建设代理进程等待 为什么要进行进程等待 进程等待是什么? 怎么进行进程等待? 回到我们之前进程状态的代码, 我们知道, 在这段代码中,父进程对子进程没有做任何的操作, 所以当子进程在退出后, 会一直处于…

进程等待

为什么要进行进程等待

在这里插入图片描述

进程等待是什么?

在这里插入图片描述

怎么进行进程等待?

在这里插入图片描述
回到我们之前进程状态的代码, 我们知道, 在这段代码中,父进程对子进程没有做任何的操作, 所以当子进程在退出后, 会一直处于僵尸状态。

如果想要对子进程进行处理 我们父进程调用wait/waitpid对僵尸进程进行回收

wait()

在这里插入图片描述
我们添加这一段, 让父进程去回收子进程

在这里插入图片描述
可以看到 一段时间后, 子进程已经进入了僵尸状态

在这里插入图片描述
然后又被父进程给回收掉了, 此时子进程进入X状态, 然后迅速被系统回收, 然后就只剩下父进程自己一个人在运行了

小总结

到目前为止:我们必须对子进程进行回收, 因为如果不回收会造成内存泄漏
wait()等待的是该进程的所有子进程

在这里插入图片描述
这段代码就是回收多个子进程的示例。

阻塞等待

如果父进程在wait的时候没有一个子进程进入了僵尸状态, 那么父进程就会一直在wait处阻塞
在这里插入图片描述
一个进程等待, 不一定是在等待硬件资源 例如这个 是在等待软件条件。

waitpid()

在这里插入图片描述

status参数

在这里插入图片描述
我们之前一直都是只提到了回收进程, 却还不知道该如何获得被回收进程的信息, 那么我们是如何获得被回收进程的信息的呢?

答案就是靠的这个status参数

status是一个输出型参数, 我们通过这个指针将函数内部的数据带出来

在这里插入图片描述

status一共有32个比特位, 我们只关心他的低16位:
其中低7位表示子进程退出时的终止信号, 第8个比特位我们叫做core dump标志, 这个我们后面在说(信号)

次低8位代表的是退出状态, 即进程退出时的退出码

子进程退出,一共有几种退出场景呢?

3种
1 代码运行完毕, 结果正确
2 代码运行完毕, 结果错误
3 代码异常终止

父进程等待, 期望获得子进程退出的哪些信息呢?

1 子进程代码是否异常
2 没有异常的话, 其结果对吗? 不对是因为什么呢?

为什么父进程一定要通过wait等系统调用来获得子进程信息?

因为进程之间具有独立性, 用户无法直接去拿到子进程的信息, 只有通过系统调用才行。

waitpid 的原理

我们知道, 当子进程在退出的时候, 操作系统会释放掉子进程的代码和数据, 但是一定不会释放掉子进程的pcb, 而这pcb里就保存的有子进程的退出信息

在这里插入图片描述
可以看到在test_struct中, Linux对退出信息的描述

父进程在调用wait后, 系统就会去子进程的pcb里找到这些退出信息, 然后将它返回给父进程

为什么一定要调用系统调用, 而不能用户自己去子进程里找

因为父子进程虽然之间有一定的联系, 但是终究还是两个进程, 而进程是具有独立性的,要想在一个进程中获取另外一个进程的信息, 就得去访问他的pcb, 而pcb是Linux操作系统管理的资源, 我们普通用户是无法直接去访问操作系统内部管理的资源的。

进程在等待的时候, 什么时候会等待失败呢?

在这里插入图片描述
通过查看man手册, 我们发现wait在等待成功的时候会返回子进程的pid, 这个我们之前了解到了, 但是还有一种可能, 那就是等待失败的时候会返回-1, 什么情况下会等待失败呢?

其实很简单, 就是当你等待的进程不是你的子进程的时候, 此时就会等待失败

在这里插入图片描述
如图, 我们本来是应该去等待pid为id的进程, 但是我们这里等待了id +4的进程。
在这里插入图片描述
运行一下发现果然等待失败了。

关于status的宏

WIFEXITED与WEXITSTATUS

在这里插入图片描述

在这里插入图片描述

options参数

讲完了waitpid的前两个参数, 我们现在来谈谈第三个参数吧

这个参数其实就是觉得我们父进程在等待子进程时所采用的等待方案

阻塞等待

比如我们之前一直在使用的0就是阻塞等待
也就是当父进程在等待子进程时会进入阻塞状态, 知道子进程结束了, 被父进程回收了, 才会恢复运行状态。

非阻塞轮询

还有一种状态叫做非阻塞轮询

想要以这种方式等待进程, 我们需要给options传递一个宏- WNOHANG
此时, 父进程在等待子进程的时候, 不会进入阻塞状态, 而是进行非阻塞轮询 + 自己的事

在阻塞等待的时候, 我们可能会得到两种返回值
1 ret > 0 等待成功, 返回等待到的子进程的pid
2 ret < 0 等待失败, 你想等待的进程不是你的子进程, 返回-1
非阻塞轮询中还会有另外一种返回值ret == 0 此时代表我们在调用wait时子进程还未就绪(结束)

在这里插入图片描述
我们以这段代码做示范

在这里插入图片描述

可以看到, 父进程在等待子进程的时候, 如果此时子进程没有结束, 那么父进程会反复的调用wait, 直到子进程退出, 父进程等待成功

1 通常在非阻塞轮询的时候, 父进程做的事都是顺便做的, 不会去做一些工程量很大的事, 因为此时父进程的主要任务应当是去等待子进程, 而不是去执行自己的任务
2 并不是子进程退出后就必须马上将其回收, 等待一会再回收也是没问题的
3 通过进程等待可以保证父进程是所有进程中最后一个退出的进程。

http://www.hkea.cn/news/554389/

相关文章:

  • 手机网站搭建网络宣传方式
  • 2003网站建设网站seo哪家公司好
  • 成都学校网站制作2022年国际十大新闻
  • 工厂外贸网站建设台州网络推广
  • 酒店网站建设方案策划百度seo怎么做网站内容优化
  • 网站更改公司需要重新备案吗搜索网页内容
  • 现在做网站还用dw做模板了吗成人电脑速成培训班
  • 做app要不要建网站刚开的店铺怎么做推广
  • 做生存分析的网站有哪些专业的网站优化公司
  • 网站双倍浮动百度联盟app
  • 北京网站设计确保代码符合w3c广州网络营销的推广
  • 做网站实名认证有什么用百度移动端模拟点击排名
  • 知更鸟wordpress 怎样沈阳百度seo关键词优化排名
  • 携程网站模板互联网营销策略有哪些
  • 做网站内链什么意思上海排名优化seobwyseo
  • 四川做直销会员网站百度网盘帐号登录入口
  • 做百度竞价对网站有无要求网站推广排名服务
  • 建设工程合同包括成都网站改版优化
  • 深圳不加班的互联网公司整站seo优化
  • 中国做的很好的食品网站肇庆疫情最新消息
  • 做时时彩网站微信seo关键词有话要多少钱
  • 陇南市建设局网站商务软文写作
  • 做学术研究的网站营销方案怎么写?
  • 专业网站设计公司有哪些秒收录关键词代发
  • 织梦网站模板源码下载真实有效的优化排名
  • 网站建设过程中什么最重要磁力链bt磁力天堂
  • html5企业网站案例鹤壁搜索引擎优化
  • 网站建设平台简介链接交换平台
  • 照片展示网站模板宁波seo咨询
  • 奉贤建设机械网站制作长沙网址seo