python练习笔记——利用信号signal处理僵尸进程
1 signal处理僵尸进程的基于语法
利用信号signal处理僵尸进程的方法:signal(SIGCHLD,SIG_IGN),该方法也是第三种处理僵尸进程的方法。
SIGCHLD:子进程状态改变后产生此信号,父进程需要调用一个wait函数以确定发生了什么。
1)SIG_IGN:信号被无视(ignore)或忽略,在该状态下,调用进程的子进程将不产生僵尸进程。
该种模式下的子进程状态信息会被丢弃,也就是自动回收,所以不会产生僵尸进程,但问题也就来了,若调用wait、waitpid函数时无法捕捉到子进程状态信息了,也就会阻塞到所有的子进程结束;并返回错误ECHILD,也就是没有子进程等待。
2)SIG_DFL:进程采用默认(default)行为处理,而默认的处理方式是不理会该信号,但也不会丢弃子进程的状态,所以此时不用wait、waitpid对其子进程进行状态信息回收,则会产生僵尸进程。
2 unix中僵尸进程的含义
凡是父进程没有调用wait函数获得子进程终止状态的子进程在终止之后都是僵尸进程,在这个概念中关键一点就是父进程是否调用了wait函数。
3 SIGCHLD信号
简单地说,子进程退出时父进程会收到一个SIGCHLD信号,默认的处理方式是忽略该信号,而常规的做法是在这个信号处理函数中调用wait函数获取子进程的退出状态。
4、既然在SIGCHLD信号的处理函数中要调用wait函数族,为什么有了wait函数族还需要使用SIGCHLD信号?
unix中的信号处理是采用异步处理机制;
一般而言,父进程在生成子进程之后会有两种情况:一是父进程完成自己的任务,二是父进程不做任务,一直在wait子进程退出。
SIGCHLD信号就是为第一种情况准备的,它让父进程去做别的任务,而只要父进程注册了处理该信号的函数,在子进程退出时就会调用该函数,在函数中wait子进程得到终止状态之后再继续做父进程的事情。
注:
1)凡父进程不调用wait函数族获得子进程终止状态的条件下,子进程在退出时都会变成僵尸进程
2)SIGCHLD信号可以异步通知父进程有子进程退出。
参考:
python练习笔记——利用信号signal处理僵尸进程的更多相关文章
- Python标准库07 信号 (signal包,部分os包)
		作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux的信号基础之后,Python标准库中的signal包就很容易学习 ... 
- 使用Python定时清理运行超时的pdflatex僵尸进程
		问题 在我们之前的<基于texlive定制chemfig化学式转换Python服务镜像>定制的pdflatex在线转换的镜像已经运行在生产环境了,但是最近总有人反馈服务跑着跑着就慢了,本来 ... 
- python学习笔记(九)——线程与进程
		一.线程 Python 中为我们提供了两个模块来创建线程. _thread threading thread 模块已被废弃.用户可以使用 threading 模块代替.所以,在 Python 中不能再 ... 
- Python练习笔记——利用递归求年龄,第五个比第四个大2岁...
		现在有五个人, 第五个人比第四个人大两岁,18 第四个人比第三个人大两岁,16 第三个人比第二个人大两岁,14 第二个人比第一个人大两岁,12 第一个人现10岁, 10 ... 
- Python复习笔记(七)线程和进程
		1. 多任务 并行:真的多任务 并发:假的多任务 2. 多任务-线程 Python的 Thread模块是比较底层的模块,Python的 Threading模块 是对Thread做了一些包装,可以更加方 ... 
- python学习笔记-(十三)线程、进程、多线程&多进程
		为了方便大家理解下面的知识,可以先看一篇文章:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 线程 1.什么是线程? ... 
- OS之进程管理---孤儿进程和僵尸进程
		僵尸进程 当一个进程终止时,操作系统会释放其资源,不过它位于进程表中的条目还是在的,直到它的父进程调用wait():这是因为进程表中包含了进程的退出状态.当进程已经终止,但是其父进尚未调用wait() ... 
- Linux系统僵尸进程详解
		大安好,我是良许. 本文我们将来讨论一下什么是僵尸进程,僵尸进程是怎么产生的,如何杀死一个僵尸进程. Linux中的进程是什么? 讲到进程,我们要先了解一下另一个概念:程序. 程序说白了就是躺在电脑硬 ... 
- 越努力越幸运--2-LD_PRELOAD, fork ,僵尸进程
		开始新的工作了,做了爸爸之后感觉一直都是浑浑噩噩,希望老婆和宝宝一直健康开心~ 最近遇到的问题很多啊,哈哈 1. 装环境时候,需要的glibc 版本不对,我把本地的软链接改了个别名(惯性思维),然后一 ... 
随机推荐
- [18] 螺旋楼梯(Spiral Stairs)图形的生成算法
			顶点数据的生成 bool YfBuildSpiralStairsVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint sli ... 
- [转]【Delphi】 Thread.Queue与Synchronize的区别
			前话: 其实大家要学会看源码, 我接下来要说的这些东东,与其等别人讲,还不如自己搞几个代码试一下,印象还深刻点 TThread.Queue和TThread.Synchronize的区别,效果上:二者 ... 
- WampServer和phpStorm的用法
			WampServer的安装 修改默认的浏览器和文本编辑器 phpStore创建一个PHP工程 在phpStore中运行我们的项目 配制一个PHP Script运行环境 配制一个PHP Web Page ... 
- 服务 Service 清单文件中可设置的属性
			PS:对于一个Service,在没有在AndroidManifest.xml中声明的情况下使用时,不会像Activity那样直接崩溃并提示找不到Activity. 对于显式Intent启动的Servi ... 
- 两个JS对象怎样才能相等
			在JS中,两个对象如何才能相等?下面的两个 Alert,只有一个输出true. 在JS中如何才能构造出两个JS对象相等? var prop1 = {asd:{def:'abc'}}; var pro ... 
- C++类模板的三种特化
			说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多.我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型: 二是特化为引用,指针 ... 
- cocos2dx游戏存储举例及其注意事项
			今天白白跟大家分享一下cocos2dx中游戏的存储及需要注意的事项 cocos2dx中自带了存储类:CCUserDefault ,倘若需要存储的数据量教大的话,建议使用数据库来存储 现在先给大家看一下 ... 
- Java--解压缩zip包
			Test.java import java.io.IOException; public class Test { public static void main(String[] args) thr ... 
- 廖雪峰的python学习网址
			http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140737570055886 ... 
- Endv 博客简介
			Endv 博客简介 此博客收集了 C++.Android.C#.java.php 等优秀的开源项目, 同时也对 Windows.Linux.CentOS 等系列操作系统的开发环境.办公环境的配置写了一 ... 
