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信号可以异步通知父进程有子进程退出。

参考:

signal(SIGCLD,SIG_IGN)

linux下的僵尸进程处理SIGCHLD信号

python练习笔记——利用信号signal处理僵尸进程的更多相关文章

  1. Python标准库07 信号 (signal包,部分os包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux的信号基础之后,Python标准库中的signal包就很容易学习 ...

  2. 使用Python定时清理运行超时的pdflatex僵尸进程

    问题 在我们之前的<基于texlive定制chemfig化学式转换Python服务镜像>定制的pdflatex在线转换的镜像已经运行在生产环境了,但是最近总有人反馈服务跑着跑着就慢了,本来 ...

  3. python学习笔记(九)——线程与进程

    一.线程 Python 中为我们提供了两个模块来创建线程. _thread threading thread 模块已被废弃.用户可以使用 threading 模块代替.所以,在 Python 中不能再 ...

  4. Python练习笔记——利用递归求年龄,第五个比第四个大2岁...

    现在有五个人, 第五个人比第四个人大两岁,18 第四个人比第三个人大两岁,16 第三个人比第二个人大两岁,14 第二个人比第一个人大两岁,12 第一个人现10岁,                 10 ...

  5. Python复习笔记(七)线程和进程

    1. 多任务 并行:真的多任务 并发:假的多任务 2. 多任务-线程 Python的 Thread模块是比较底层的模块,Python的 Threading模块 是对Thread做了一些包装,可以更加方 ...

  6. python学习笔记-(十三)线程、进程、多线程&多进程

    为了方便大家理解下面的知识,可以先看一篇文章:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 线程 1.什么是线程? ...

  7. OS之进程管理---孤儿进程和僵尸进程

    僵尸进程 当一个进程终止时,操作系统会释放其资源,不过它位于进程表中的条目还是在的,直到它的父进程调用wait():这是因为进程表中包含了进程的退出状态.当进程已经终止,但是其父进尚未调用wait() ...

  8. Linux系统僵尸进程详解

    大安好,我是良许. 本文我们将来讨论一下什么是僵尸进程,僵尸进程是怎么产生的,如何杀死一个僵尸进程. Linux中的进程是什么? 讲到进程,我们要先了解一下另一个概念:程序. 程序说白了就是躺在电脑硬 ...

  9. 越努力越幸运--2-LD_PRELOAD, fork ,僵尸进程

    开始新的工作了,做了爸爸之后感觉一直都是浑浑噩噩,希望老婆和宝宝一直健康开心~ 最近遇到的问题很多啊,哈哈 1. 装环境时候,需要的glibc 版本不对,我把本地的软链接改了个别名(惯性思维),然后一 ...

随机推荐

  1. java.net.URI 简介 文档 API

    URI 简介 文档地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh public final class java.net.URI extend ...

  2. Android GUI之View事件处理

     Android中的事件分为按键事件和触屏事件,本篇文章将分析View是如何处理Touch事件的.在View中定义了许多触屏事件,比如OnClick.OnLongClick等等,这些事件都是由一次To ...

  3. .NET-"/"应用程序中的服务器错误

    当出现这个问题的时候,就在web.config文件中加上代码:<customErrors mode="Off"/> 然后重新访问站点就能看到问题所在了,例如我的错误显示 ...

  4. CentOS 7 中 hostnamectl 的使用

    hostnamectl 是在 centos7 中新增加的命令,它是用来修改主机名称的,centos7 修改主机名称会比以往容易许多. 用法 # hostnamectl -h -h --help 显示帮 ...

  5. UICamera(NGUI Event system)原理

    看了UICamera的源码就显而易见了: UICamera « on: November 21, 2013, 12:21:48 AM »   Overview UICamera is a somewh ...

  6. (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航

    (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航 首页支持微信登陆,只有第8套模板支持(endv模板),后 ...

  7. PHP表单-PHP $_POST 变量

    PHP $_POST 变量 在 PHP 中,预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值. $_POST 变量 预定义的 $_POST 变量用 ...

  8. locate 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/11/12/2765750.html locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法 ...

  9. vlc的应用之七:用vlc做单播,组播及点播服务器【转】

     vlc的应用之七:用vlc做单播,组播及点播服务器 2009-05-31 15:56:03 标签:vod multicast vlc vlm unicast   http://ubuntu.mezo ...

  10. java 散列与散列码探讨 ,简单HashMap实现散列映射表运行各种操作示列

    java 散列与散列码探讨 ,简单HashMap实现散列映射表运行各种操作示列 package org.rui.collection2.maps; /** * 散列与散列码 * 将土拔鼠对象与预报对象 ...