2019独角兽企业重金招聘Python工程师标准>>>

遇到信号量的问题?

signal(SIGCLD,SIG_IGN)

SIGCHLD的语义为:子进程状态改变后产生此信号,父进程需要调用一个wait函数以确定发生了什么。

对于SIGCLD的早期处理方式如下:如果进程特地设置该信号的配置为SIG_IGN,则调用进程的子进程将不产生僵死进程。

如果将SIGCLD的配置设置为捕捉,则内核立即检查是否有子进程准备好被等待,如果是这样,则调用SIGCLD处理程序。

APUE上SIGCLD语义写的有点不清楚,到底我们的系统是如何来处理SIGCLD信号呢?
    1.SIG_DFL :默认的处理方式是不理会这个信号,但是也不会丢弃子进行状态,所以如果不用wait,waitpid

对其子进行进行状态信息回收,会产生僵尸进程。
    2.SIG_IGN :忽略的处理方式,这个方式和默认的忽略是不一样的语意,暂且我们把忽略定义为SIG_IGN,

在这种方式下,子进程状态信息会被丢弃,也就是自动回收了,所以不会产生僵尸进程,但是问题也就来了,

wait,waitpid却无法捕捉到子进程状态信息了,如果你随后调用了wait,那么会阻塞到所有的子进程结束,并返

回错误ECHILD,也就是没有子进程等待。
       APUE中P248叙述SIGCHLD如果配置成SIG_IGN也不会产生僵尸进程。是否系统SIG_IGN配置下,对

SIGCLD,SIGCHLD做出的处理方式是相同的。
   3.自定义处理方式:SIGCLD会立即检查是否有子进程准好被等待,这便是SIGCLD最大漏洞了,一旦在信号

处理函数中加入了信号处理方式重建的步骤,那么每次设置SIGCLD处理方式时,都会去检查是否有信号到来,

如果此时信号的确到来了,先是调用自定义信号处理函数,然后是调用信号处理方式重建函数,在重建配置的

时候,会去检查信号是否到来,此时信号未被处理,会再次触发自定义信号处理函数,一直循环。

所以在处理SIGCLD时,应该先wait处理掉了信号信息后,再进行信号处理方式重建。

SIGCHLD在配置信号处理方式时,是不会立即检查是否有子进程准备好被扽带,也不会在此时调用信号处理函数。

转载于:https://my.oschina.net/aslanjia/blog/699802

signal(SIGCLD,SIG_IGN)相关推荐

  1. signal(SIGCHLD, SIG_IGN) 和 signal(SIGPIPE, SIG_IGN) 使用场景

    一.signal(SIGCHLD, SIG_IGN); 因为并发服务器常常 fork 很多子进程,子进程终结之后需要服务器进程去 wait 清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进 ...

  2. signal(SIGHUP, SIG_IGN);

    signal(SIGHUP, SIG_IGN); 的理解 转载于:https://www.cnblogs.com/lanjiangzhou/p/10505653.html

  3. signal(SIGPIPE, SIG_IGN);

    TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道,  但本端只是收到FIN包. 按照TCP协议的语义, 表示对 ...

  4. signal(SIGCHLD, SIG_IGN)

    python 中使用import signal就可以导入模块了 signal(参数一,参数二) 参数一:我们要进行处理的信号.系统的信号我们可以再终端键入 kill -l查看(共64个).其实这些信号 ...

  5. signal(SIGPIPE, SIG_IGN)

    关于SIGPIPE导致的程序退出 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIP ...

  6. signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);

    signal(SIGCHLD, SIG_IGN); 因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给in ...

  7. 什么是signal(SIGCHLD, SIG_IGN)函数

    什么是signal(SIGCHLD, SIG_IGN)函数 在进行网络编程时候遇到这个函数的使用,自己学习结果如下,有不对请帮忙指正:) signal(SIGCHLD, SIG_IGN) 打开manp ...

  8. python练习笔记——利用信号signal处理僵尸进程

    1 signal处理僵尸进程的基于语法 利用信号signal处理僵尸进程的方法:signal(SIGCHLD,SIG_IGN),该方法也是第三种处理僵尸进程的方法. SIGCHLD:子进程状态改变后产 ...

  9. 说说SIGCLD和SIGCHLD

    在学习 APUE 信号一章时,书中描述 SIGCLD和 SIGCHLD信号时,我一时没有搞清楚,在查阅一些资料后把二者的不同描述在此. APUE这本书有一个很大的特点是:它全书写的是Unix平台的编程 ...

  10. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

最新文章

  1. LINUX开启SNMP方法
  2. VR+监狱,分分钟让犯罪分子重新做人
  3. x9此计算机上没有hasp_为什么我在别人电脑上好装mastercam9,在自己电脑装不成功,它没有出现什么HASP驱动安装的提示,为什么...
  4. eq linux_在线试用 200 多种 Linux 和 Unix 操作系统 | Linux 中国
  5. Swift云存储特性研究
  6. html运用以及工具
  7. plsql中文乱码问题(显示问号)
  8. SDNU 1467.杨辉三角形(水题)
  9. python matplotlib画图产生的Type 3 fonts字体没有嵌入问题
  10. SAP Spartacus的Angular.json内容一览
  11. python自动生成宣传单_python – Matplotlib boxplot只显示最大和最小传单
  12. 动态分配算法_【原创连载】算法素颜(第4篇):空间复杂度你真的懂了吗?
  13. MFC学习之简单的文本文件编辑器
  14. C# CAD批量转换为图片
  15. C语言将raw转为bmp,Raw格式转换为Bmp格式
  16. 深入浅出理解Java并发AQS的共享锁模式
  17. 基于SDN环境下的DDoS异常攻击的检测与缓解--实验
  18. Spring高手之路——深入理解与实现IOC依赖查找与依赖注入
  19. P1650 田忌赛马
  20. itextPDF操作PDF,获取PDF内容

热门文章

  1. [原创]Silverlight与SQLite数据库的互操作(CURD完全解析)[Final]
  2. GENTLE.NET快速上手
  3. 解决VIM打开U盘文件中文乱码的问题以及VIM有用的配置
  4. Dlib-人脸识别API说明
  5. 关于中断是否可以套嵌?
  6. 地表净辐射通量数据、太阳辐射量数据、降雨量数据、气温数据、日照时长、水汽压分布、风速风向数据、地表温度
  7. python zip函数小结
  8. spark 两个rdd求交集,差集,并集
  9. awk字符串匹配与传参
  10. logistic回归详解(三):梯度下降训练方法