_018_回收子进程_信号传参

Posted huangtiandi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了_018_回收子进程_信号传参相关的知识,希望对你有一定的参考价值。

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

                    回收子进程

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

  技术分享图片

 

 

  技术分享图片

  技术分享图片

  技术分享图片

  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_回收子进程_信号传参的主要内容,如果未能解决你的问题,请参考以下文章

linux 多进程并发服务__关于子进程回收的方法

《python》join守护进程锁/信号量/事件进程队列

Python网编_join方法

计算机系统篇之异常控制流:如何正确地回收子进程

计算机系统篇之异常控制流:如何正确地回收子进程

基础入门_Python-模块和包.Gevent事件/队列/组/池/信号量/子进程?