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

网站哪些功能是PHP做的石家庄网络seo推广

网站哪些功能是PHP做的,石家庄网络seo推广,应用市场下载安装,网站页面安全监测建设方案进程等待 为什么要进行进程等待 进程等待是什么? 怎么进行进程等待? 回到我们之前进程状态的代码, 我们知道, 在这段代码中,父进程对子进程没有做任何的操作, 所以当子进程在退出后, 会一直处于…

进程等待

为什么要进行进程等待

在这里插入图片描述

进程等待是什么?

在这里插入图片描述

怎么进行进程等待?

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

如果想要对子进程进行处理 我们父进程调用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.ds6.com.cn/news/49160.html

相关文章:

  • 营销型网站有哪些出名的电商网站建设公司
  • 网站备案名称修改品牌定位
  • wordpress站内短信济南网站建设哪家好
  • 医院网站建设案例种子搜索引擎 磁力天堂
  • js获取网站htmlseo综合查询平台
  • 济南地区做公司网站的公司网站客服系统
  • 电商网站建设是做什么的公司网站建设服务
  • _沈阳做网站杭州千锋教育地址
  • 成功做网站电商平台营销策划方案
  • 服装外贸erp东营seo
  • 网站建设毕业设计文献综述荆门网站seo
  • 网站名称跟域名汕头网站排名
  • 比较好的做简历的网站网站推广优化教程
  • 滴滴注册网站舟山百度seo
  • 可以做网页的网站西安整站优化
  • 惠州做网站静态网页制作
  • 做网站需要准备哪些郑州网站建设方案
  • 资讯网站怎么做seo快速排名工具
  • 做日语字幕的网站用模板快速建站
  • 免费门户网站模板seo推广外包
  • 做农家乐网站合肥百度竞价推广代理公司
  • 婚纱影楼网站源码外贸网站搭建推广
  • 做爰网站爱情岛适合企业员工培训的课程
  • 如何做好一个网站的推广广州seo关键词优化是什么
  • 用点心做点心官方网站seo搜索引擎优化软件
  • 公司网站怎么做才能吸引人免费发布友链
  • 广州网站开发 英诺科技互联网推广平台有哪些
  • 东营市住房和建设委员会网站软文推广产品
  • 新浪微博可以做网站吗竞价排名点击
  • wordpress 标签模板广州seo推广公司