signal(SIGCLD,SIG_IGN)
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)相关推荐
- signal(SIGCHLD, SIG_IGN) 和 signal(SIGPIPE, SIG_IGN) 使用场景
一.signal(SIGCHLD, SIG_IGN); 因为并发服务器常常 fork 很多子进程,子进程终结之后需要服务器进程去 wait 清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进 ...
- signal(SIGHUP, SIG_IGN);
signal(SIGHUP, SIG_IGN); 的理解 转载于:https://www.cnblogs.com/lanjiangzhou/p/10505653.html
- signal(SIGPIPE, SIG_IGN);
TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对 ...
- signal(SIGCHLD, SIG_IGN)
python 中使用import signal就可以导入模块了 signal(参数一,参数二) 参数一:我们要进行处理的信号.系统的信号我们可以再终端键入 kill -l查看(共64个).其实这些信号 ...
- signal(SIGPIPE, SIG_IGN)
关于SIGPIPE导致的程序退出 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIP ...
- signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);
signal(SIGCHLD, SIG_IGN); 因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给in ...
- 什么是signal(SIGCHLD, SIG_IGN)函数
什么是signal(SIGCHLD, SIG_IGN)函数 在进行网络编程时候遇到这个函数的使用,自己学习结果如下,有不对请帮忙指正:) signal(SIGCHLD, SIG_IGN) 打开manp ...
- python练习笔记——利用信号signal处理僵尸进程
1 signal处理僵尸进程的基于语法 利用信号signal处理僵尸进程的方法:signal(SIGCHLD,SIG_IGN),该方法也是第三种处理僵尸进程的方法. SIGCHLD:子进程状态改变后产 ...
- 说说SIGCLD和SIGCHLD
在学习 APUE 信号一章时,书中描述 SIGCLD和 SIGCHLD信号时,我一时没有搞清楚,在查阅一些资料后把二者的不同描述在此. APUE这本书有一个很大的特点是:它全书写的是Unix平台的编程 ...
- Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...
最新文章
- LINUX开启SNMP方法
- VR+监狱,分分钟让犯罪分子重新做人
- x9此计算机上没有hasp_为什么我在别人电脑上好装mastercam9,在自己电脑装不成功,它没有出现什么HASP驱动安装的提示,为什么...
- eq linux_在线试用 200 多种 Linux 和 Unix 操作系统 | Linux 中国
- Swift云存储特性研究
- html运用以及工具
- plsql中文乱码问题(显示问号)
- SDNU 1467.杨辉三角形(水题)
- python matplotlib画图产生的Type 3 fonts字体没有嵌入问题
- SAP Spartacus的Angular.json内容一览
- python自动生成宣传单_python – Matplotlib boxplot只显示最大和最小传单
- 动态分配算法_【原创连载】算法素颜(第4篇):空间复杂度你真的懂了吗?
- MFC学习之简单的文本文件编辑器
- C# CAD批量转换为图片
- C语言将raw转为bmp,Raw格式转换为Bmp格式
- 深入浅出理解Java并发AQS的共享锁模式
- 基于SDN环境下的DDoS异常攻击的检测与缓解--实验
- Spring高手之路——深入理解与实现IOC依赖查找与依赖注入
- P1650 田忌赛马
- itextPDF操作PDF,获取PDF内容