signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给init进程去处理,省去了大量僵尸进程占用系统资源。(Linux Only)
对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将 SIGCHLD信号的操作设为SIG_IGN。
signal(SIGPIPE, SIG_IGN);
TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道,
但本端只是收到FIN包. 按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条单工信道, 仍然可以继续接收数据. 也就是说, 因为TCP协议的限制,
一个端点无法获知对端的socket是调用了close还是shutdown.
对一个已经收到FIN包的socket调用read方法,
如果接收缓冲已空, 则返回0, 这就是常说的表示连接关闭. 但第一次对其调用write方法时, 如果发送缓冲没问题, 会返回正确写入(发送).
但发送的报文会导致对端发送RST报文, 因为对端的socket已经调用了close, 完全关闭, 既不发送, 也不接收数据. 所以,
第二次调用write方法(假设在收到RST之后), 会生成SIGPIPE信号, 导致进程退出.
为了避免进程退出, 可以捕获SIGPIPE信号, 或者忽略它, 给它设置SIG_IGN信号处理函数:
signal(SIGPIPE, SIG_IGN);
这样, 第二次调用write方法时, 会返回-1, 同时errno置为SIGPIPE. 程序便能知道对端已经关闭.
signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);相关推荐
- signal(SIGCHLD, SIG_IGN) 和 signal(SIGPIPE, SIG_IGN) 使用场景
一.signal(SIGCHLD, SIG_IGN); 因为并发服务器常常 fork 很多子进程,子进程终结之后需要服务器进程去 wait 清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进 ...
- signal(SIGPIPE, SIG_IGN)
关于SIGPIPE导致的程序退出 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIP ...
- signal(SIGPIPE, SIG_IGN);
TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对 ...
- signal(SIGCHLD, SIG_IGN)
python 中使用import signal就可以导入模块了 signal(参数一,参数二) 参数一:我们要进行处理的信号.系统的信号我们可以再终端键入 kill -l查看(共64个).其实这些信号 ...
- 什么是signal(SIGCHLD, SIG_IGN)函数
什么是signal(SIGCHLD, SIG_IGN)函数 在进行网络编程时候遇到这个函数的使用,自己学习结果如下,有不对请帮忙指正:) signal(SIGCHLD, SIG_IGN) 打开manp ...
- listen函数的第二个参数_signal(SIGPIPE,?SIG_IGN)listen函数中backlog参数分析
signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端 ...
- system函数和signal(SIGCHLD, SIG_DFL)的“固定搭配”
背景知识: 子进程先于父进程结束时,会给父进程发送SIGCHLD信号 如果 ...
- python signal模块_Python使用signal模块实现定时执行
在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...
- python signal模块_Python2.7 signal
在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...
最新文章
- Android—ActivityThread与Handler
- Git 各指令的本质,真是通俗易懂啊
- mysql properties文件路径_读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题...
- python跳出if条件_带你学python基础:条件控制if与循环语句while、for 以及range函数...
- Facebook如何“养号”干货分享
- Docker、CentOS 8遭弃用,GPT-3、M1芯片撼动技术圈,盘点2020影响开发者的十大事件!
- IO流介绍与File类
- 关于lua字节码在32位和64位系统上不兼容的问题
- 易语言的Java皮肤_易语言软件更换皮肤的方法
- Win7英文版打补丁遇到的问题汇总
- 英语语法基础(适合入门者)--第一章:词、单词
- 【转】javascript实现图片的连续滚动
- (六十五)Android O StartService的 anr timeout 流程分析
- 慢慢来,等待也是一种美好
- 【100个 Unity小知识点】☀️ | Unity 中怎样读取Excel文件
- #include中用双引号和用尖括号括起来头文件的区别
- Ubuntu18.04 没有有以太网连接的解决办法
- java从小白到老白⑤——传智播客27版笔记
- Matlab高光谱遥感、数据处理与混合像元分解实践技术应用
- Java学习笔记----------集合Set
热门文章
- 税务总局:今年预计减税1.8万亿元!个体户能享受哪些税收优惠?
- Sass-5【颜色函数、透明度函数、@规则】
- avoid mutating a prop directly since the value will be overwritten whenever完美解决
- Vasp二维材料单胞基本计算范例
- 如何实现自有App上的小程序第三方微信授权登陆?
- 小麦苗blog文章索引
- 软件安装下载【Android】
- android 手机开门,1号社区APP"手机开不了门后的处理流程"
- Counterpoint:2018年第三季度中国手机市场现状与双十一展望
- 千万级规模高性能、高并发的网络架构经验分享