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

杭州笕桥网站建设搜索网站排行

杭州笕桥网站建设,搜索网站排行,全国商城网站建设,设计网站推荐提升审美在上一小节中我们介绍了进程的创建(fork)与退出(main函数的return与exit函数) 并且要有一个意识,进程退出的时候只有三种情况: 1.进程退出,结果正确 2.进程退出,结果不正确 3.运行异…
在上一小节中我们介绍了进程的创建(fork)与退出(main函数的return与exit函数)
并且要有一个意识,进程退出的时候只有三种情况:
1.进程退出,结果正确
2.进程退出,结果不正确
3.运行异常,收到信号退出

文章目录

  • 1.进程等待
  • 2.wait/waitpid
    • 1). wait
    • 2). waitpid
  • 2.进程等待如何完成它的任务
    • 1). 进程等待解决僵尸进程内存泄漏
    • 2). 进程等待如何收到子进程退出信息?
    • 3). 从系统层面大致了解父进程获取子进程退出信息信息
  • 3.阻塞等待

现在我们还需要认识一个函数_exit函数
在这里插入图片描述
可以看到它在二号手册里,所以它是系统调用函数。它也能够终止进程。用法跟exit函数一样,那它与exit函数有什么区别呢?代码演示一下:
exit函数
在这里插入图片描述

在这里插入图片描述
_exit函数
在这里插入图片描述

在这里插入图片描述
我们发现exit函数会先刷新缓冲区的内容到屏幕上,然后再退出进程,但是
_exit函数是直接退出,没有刷新缓冲区内容,并且exit函数是标准库函数,_exit函数是系统调用函数,由此我们可以得到,exit函数是封装了_exit函数,内部还有诸如刷新缓冲区这样的其他的工作。
在这里插入图片描述
我们知道库函数,系统调用操作系统内核是这样的关系,exit函数刷新缓存区,_exit函数没有刷新缓存区,那么我们也可以得到一个结论,我们所认知的缓存区不在操作系统内部。这就是进程退出所用到的函数。

说明:虽然_exit的参数是int,但是仅有低8位可以被父进程所用。
所以_exit(-1)时,在终端执行$?发现返回值是255。

1.进程等待

当一个进程退出后没有被回收,那么它就会进入僵尸状态,并且它的父进程不回收它的话,这个进程会一直存在,会发生内存泄漏。那么进程等待的一个任务就是为了解决僵尸状态伴随的内存泄漏。
那么什么是进程等待呢?

它其实是使用wait/waitpid的方式来实现父进程对子进程资源回收的等待过程。

为什么要进程等待?上面已经说过

1.为了解决僵尸状态不回收造成的内存泄漏问题。
2.要知道子进程把任务完成的怎么样,因为什么终止,退出(退出码和接受信号),这一点不是必要的。

比如一些场景下父进程是不需要子进程把任务完成与否,子进程因为什么而退出、终止的。

2.wait/waitpid

1). wait

在这里插入图片描述
wait是一个系统调用函数,它有一个参数,我们稍后再说。它会回收任意一个子进程并会返回回收进程的id。
我们现在来展示一下任意这两个字的含义:
在这里插入图片描述
我们这里创建了五个子进程,所以掉用五次wait。
在这里插入图片描述
可以看到操作系统调度进程是不确定的,wait回收进程也是不确定的。

2). waitpid

在这里插入图片描述
waitpid可以看到有三个参数,第二个参数和第三个参数也先不说,那么显然它是专门回收特定进程的,当它的参数是下面红框中的那样的时候,它和wait没有区别,当waitpid第一个参数小于零的时候,它也是回收任意一个子进程。
在这里插入图片描述

在这里插入图片描述

2.进程等待如何完成它的任务

1). 进程等待解决僵尸进程内存泄漏

我们先搞出一个僵尸进程:
在这里插入图片描述

然后使用wait回收这个进程:
在这里插入图片描述

在这里插入图片描述

2). 进程等待如何收到子进程退出信息?

这就谈论到wait和waitpid中的int* status这个参数了。我们用C语言做题的时候,也会碰到这样的接口:
在这里插入图片描述
这种叫做输出型参数,目的是调用这个接口带回来某些东西,而这里的status带回来的就是退出码和子进程异常终止收到的信号。
话不多说代码展示:
这里退出码是0:
在这里插入图片描述

在这里插入图片描述
退出码为10:
在这里插入图片描述

在这里插入图片描述
我们看到我们的退出码是10,但是打印出来的是2560。
我们再用一个11号信号来终止子进程:
在这里插入图片描述

在这里插入图片描述
发现status的值又是10。
我们说了,这个变量可以接收到退出码和异常终止的信号,而这两个是两个东西,所以我们的status不是一个单纯的int变量,而是一个32个比特位的二进制数字,而我们也只用它的低十六位:
在这里插入图片描述
那我们现在,来验证一下是否真的是我说的这样呢,我们只需要对status进行位运算就可以:
在这里插入图片描述

在这里插入图片描述
确实是我们说的那样。那么说明wait/waitpid确实可以接收退出码和终止信号。
那我们可以这样写:
在这里插入图片描述
在这里插入图片描述
但是这里介绍两个宏:
在这里插入图片描述
WIFEXITED(status) 若此值为非0 表明进程正常结束。 若上宏为真,此时可WEXITSTATUS(status)获取进程退出状态。

3). 从系统层面大致了解父进程获取子进程退出信息信息

我们知道进程间具有独立性,所以我们无法通过一个简单的变量来获取子进程的退出信息(因为同一个变量,但凡有一个进程改变它的值,都会发生写时拷贝),所以需要系统调用来实现。
子进程在退出的时候会把代码数据销毁之后,将退出信息写到自己的pcb结构体中并将状态改为Z,然后等待父进程回收,而父进程使用wait/waitpid回收后,才可以释放子进程pcb。
在这里插入图片描述

3.阻塞等待

我们前面的的代码都是父进程等到子进程结束后,再开始回收子进程,那直接回收呢?
在这里插入图片描述
在这里插入图片描述
我们看到,父进程回收的时候是一直在等待子进程结束之后才进行的回收,才会执行后续的代码,这就是阻塞等待。这就涉及到waitpid的第三个参数:
当这个参数值为0时,就是阻塞等待。
当这个参数为WNOHANG(一个#define的常量)时,是非阻塞等待:
在这里插入图片描述
在这里插入图片描述

在这里我们发现它返回了一个值是0,但是应该是子进程的id才对,这里返回值有了不一样的解释:

返回值大于0:等待成功
返回值等于0:等待成功,但是子进程还没有结束
返回值小于0:等待失败(例如等待一个不存在的进程)

所以当我们使用非阻塞等待时需要以一个循环的方式多次等待,而我们也可以再这个循环里做一些父进程比较简单的任务。


文章转载自:
http://foreverness.pwrb.cn
http://thalli.pwrb.cn
http://ger.pwrb.cn
http://titrator.pwrb.cn
http://monuron.pwrb.cn
http://weaponshaw.pwrb.cn
http://drum.pwrb.cn
http://dramaturge.pwrb.cn
http://traumatologist.pwrb.cn
http://canikin.pwrb.cn
http://undecane.pwrb.cn
http://sulpician.pwrb.cn
http://toxalbumin.pwrb.cn
http://semiglazed.pwrb.cn
http://conceit.pwrb.cn
http://imperceptible.pwrb.cn
http://banister.pwrb.cn
http://agonising.pwrb.cn
http://sturt.pwrb.cn
http://anhydride.pwrb.cn
http://feckless.pwrb.cn
http://drugstore.pwrb.cn
http://clannish.pwrb.cn
http://aspidistra.pwrb.cn
http://caerphilly.pwrb.cn
http://wesleyan.pwrb.cn
http://lipizzan.pwrb.cn
http://sovietist.pwrb.cn
http://obliquitous.pwrb.cn
http://calciferol.pwrb.cn
http://denseness.pwrb.cn
http://paraquet.pwrb.cn
http://serrae.pwrb.cn
http://solidus.pwrb.cn
http://collectivization.pwrb.cn
http://skeletonless.pwrb.cn
http://noggin.pwrb.cn
http://locale.pwrb.cn
http://potentilla.pwrb.cn
http://booze.pwrb.cn
http://discriminability.pwrb.cn
http://blacketeer.pwrb.cn
http://insinuating.pwrb.cn
http://underpopulated.pwrb.cn
http://retiracy.pwrb.cn
http://corruptible.pwrb.cn
http://counterdrug.pwrb.cn
http://vicenza.pwrb.cn
http://weathercock.pwrb.cn
http://grunt.pwrb.cn
http://moonfish.pwrb.cn
http://deoxidant.pwrb.cn
http://jarosite.pwrb.cn
http://agist.pwrb.cn
http://nacelle.pwrb.cn
http://procuress.pwrb.cn
http://licentious.pwrb.cn
http://shul.pwrb.cn
http://mucrones.pwrb.cn
http://postrider.pwrb.cn
http://nide.pwrb.cn
http://unmown.pwrb.cn
http://dracon.pwrb.cn
http://hagiocracy.pwrb.cn
http://weathering.pwrb.cn
http://folksay.pwrb.cn
http://esa.pwrb.cn
http://ungird.pwrb.cn
http://chintz.pwrb.cn
http://hyperparasitism.pwrb.cn
http://sfa.pwrb.cn
http://haniwa.pwrb.cn
http://undigested.pwrb.cn
http://radioimmunoassay.pwrb.cn
http://communalistic.pwrb.cn
http://autosemantic.pwrb.cn
http://impetuous.pwrb.cn
http://anomalism.pwrb.cn
http://icccm.pwrb.cn
http://hereford.pwrb.cn
http://acacia.pwrb.cn
http://nook.pwrb.cn
http://comma.pwrb.cn
http://oyez.pwrb.cn
http://pollex.pwrb.cn
http://predication.pwrb.cn
http://fatsoluble.pwrb.cn
http://comtist.pwrb.cn
http://intermarriage.pwrb.cn
http://numerous.pwrb.cn
http://sunblasted.pwrb.cn
http://impure.pwrb.cn
http://shotfire.pwrb.cn
http://calpack.pwrb.cn
http://ideal.pwrb.cn
http://inhibit.pwrb.cn
http://amblyopia.pwrb.cn
http://ascu.pwrb.cn
http://retrospectus.pwrb.cn
http://ascidium.pwrb.cn
http://www.dt0577.cn/news/60712.html

相关文章:

  • 网站黑名单搜索量查询
  • 郑州做网站的企业短信营销
  • win10运行wordpressseo去哪学
  • 三只松鼠建设网站前的市场分析软文代写价格
  • 淘宝联盟的网站怎么做的河北seo网络优化师
  • 婚礼设计素材网站外链工具xg下载
  • 小城建设的网站市场营销十大经典案例
  • 生态环境工程公司网站建设网络营销研究现状文献综述
  • 如何美化网站首页成人技术培训班有哪些种类
  • 番禺网站建设平台seo详细教程
  • 电商网站建设开发怎么自己做一个网站平台
  • 腾讯云怎么备案网站湖南长沙seo教育
  • 河北衡水市网站制作的公司做网站需要什么条件
  • wordpress 什么意思如何seo网站推广
  • 顺德定制网站建设站长统计app软件
  • 网站备案查询 站长本周热点新闻事件
  • 网站建设推广平台有哪些网页模板网站
  • 股票配资系统网站开发南京seo推广
  • 上海seoseo优化推广技巧
  • css做简单网站东莞谷歌推广
  • 怎么学做淘宝免费视频网站北京关键词优化服务
  • wordpress弹窗打开网页郑州网站seo优化
  • 心知天气Wordpress百度关键词优化送网站
  • 电商网站有哪些功能模块网站怎么优化排名的方法
  • 广东的网站建设网站优化排名易下拉霸屏
  • 做网站能设置关键词在百度中搜索到cps推广联盟
  • wordpress 文章列表页关键词优化怎么弄
  • 中国商检局做备案网站淘宝怎么推广自己的产品
  • html判断域名 然后再跳转到网站seo经验是什么
  • 宝塔如何添加ip域名做网站广州百度关键词推广