码迷,mamicode.com
首页 > 系统相关 > 详细

_018_回收子进程_信号传参

时间:2018-06-19 16:23:48      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:为我   wait   style   ros   表示   sof   ==   stat   10个   

=============================================================

                    回收子进程

=============================================================

  技术分享图片

 

 

  技术分享图片

  技术分享图片

  技术分享图片

  1 创建10个子进程,在46行正常结束,在55行对SIGCHLD信号进行捕获,捕获的过程的阻塞的,不会执行下面的代码,只有处理了我们指定的函数

     才会继续执行下面的代码

  2 我们的函数叫do_sig_chird,waitpid函数是对指定的进程进行回收(具体看_013_进程),第一个参数填0,也就是回收我们所有的子进程,第二个参数保存了状态

   第三个参数表示了不予以等待. 就是非阻塞,因为也没必要阻塞,我们既然已经到20行了,就代表已经捕获了SIGCHLD的信号,不需要再等待

   至于WIFEXITED是第二个参数的宏指定,22行的WEXITSTATUS是取得子进程exit()返回的结束代码,也就是取得我们第46行的return i+1

      (以上都是waitpid函数的描述,具体看_013_进程的waitpid函数)

  3 整个程序意思是,创建10个子进程,由父进程对每个进程进行回收

  4 如果第20行的while改成if,逻辑上似乎也能得到同样的效果,但是实际上,会有一部分子进程没有回收,因为我们子进程的结束是不确定的,也就是说不确定

     哪个子程序先结束,并不是想象的子进程1,子进程2...这样按顺序结束的.因为cpu的占领原因,所以不确定哪个子进程先结束

     所以我们捕获的子进程也不确定,假如waitpid捕获到了2号子进程,此时子进程3号和进程4号死亡,也发送了SIGCHLD信号,而if之执行一次

   所以有的子进程没有回收到

 

 

=============================================================

 

                    信号传参

 

=============================================================

 

_018_回收子进程_信号传参

标签:为我   wait   style   ros   表示   sof   ==   stat   10个   

原文地址:https://www.cnblogs.com/huangtiandi/p/9198449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!