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);相关推荐

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

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

  2. signal(SIGPIPE, SIG_IGN)

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

  3. signal(SIGPIPE, SIG_IGN);

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

  4. signal(SIGCHLD, SIG_IGN)

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

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

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

  6. listen函数的第二个参数_signal(SIGPIPE,?SIG_IGN)listen函数中backlog参数分析

    signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端 ...

  7. system函数和signal(SIGCHLD, SIG_DFL)的“固定搭配”

    背景知识: 子进程先于父进程结束时,会给父进程发送SIGCHLD信号 如果                                                                ...

  8. python signal模块_Python使用signal模块实现定时执行

    在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...

  9. python signal模块_Python2.7 signal

    在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...

最新文章

  1. Android—ActivityThread与Handler
  2. Git 各指令的本质,真是通俗易懂啊
  3. mysql properties文件路径_读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题...
  4. python跳出if条件_带你学python基础:条件控制if与循环语句while、for 以及range函数...
  5. Facebook如何“养号”干货分享
  6. Docker、CentOS 8遭弃用,GPT-3、M1芯片撼动技术圈,盘点2020影响开发者的十大事件!
  7. IO流介绍与File类
  8. 关于lua字节码在32位和64位系统上不兼容的问题
  9. 易语言的Java皮肤_易语言软件更换皮肤的方法
  10. Win7英文版打补丁遇到的问题汇总
  11. 英语语法基础(适合入门者)--第一章:词、单词
  12. 【转】javascript实现图片的连续滚动
  13. (六十五)Android O StartService的 anr timeout 流程分析
  14. 慢慢来,等待也是一种美好
  15. 【100个 Unity小知识点】☀️ | Unity 中怎样读取Excel文件
  16. #include中用双引号和用尖括号括起来头文件的区别
  17. Ubuntu18.04 没有有以太网连接的解决办法
  18. java从小白到老白⑤——传智播客27版笔记
  19. Matlab高光谱遥感、数据处理与混合像元分解实践技术应用
  20. Java学习笔记----------集合Set

热门文章

  1. 税务总局:今年预计减税1.8万亿元!个体户能享受哪些税收优惠?
  2. Sass-5【颜色函数、透明度函数、@规则】
  3. avoid mutating a prop directly since the value will be overwritten whenever完美解决
  4. Vasp二维材料单胞基本计算范例
  5. 如何实现自有App上的小程序第三方微信授权登陆?
  6. 小麦苗blog文章索引
  7. 软件安装下载【Android】
  8. android 手机开门,1号社区APP"手机开不了门后的处理流程"
  9. Counterpoint:2018年第三季度中国手机市场现状与双十一展望
  10. 千万级规模高性能、高并发的网络架构经验分享