linux网络通讯程序无提示自动退出——SIGPIPE信号退出
2011-11-28 15:52
357 查看
问题:
最近写了一个网络通讯程序,在局域网内调试测试都没有出问题,但是一拿到真实环境就总是出错,异常自动退出
最后根据strace发现,是因为sigpipe信号给结束掉的。
关于sigpipe信号:
产生原因:
当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。
信号默认处理:
根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN。
解决方式:
程序中加signal(SIGPIPE,SIG_IGN);把这个信号扔给系统处理。
为了防止僵尸进程,可以把子程序通过设置signal(SIGCHLD,SIG_IGN);来交给系统init来回收。
温馨提示:
所以大家在开发网络通讯程序的时候一定要注意这个信号的处理。切记
最近写了一个网络通讯程序,在局域网内调试测试都没有出问题,但是一拿到真实环境就总是出错,异常自动退出
最后根据strace发现,是因为sigpipe信号给结束掉的。
关于sigpipe信号:
产生原因:
当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。
信号默认处理:
根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN。
解决方式:
程序中加signal(SIGPIPE,SIG_IGN);把这个信号扔给系统处理。
为了防止僵尸进程,可以把子程序通过设置signal(SIGCHLD,SIG_IGN);来交给系统init来回收。
温馨提示:
所以大家在开发网络通讯程序的时候一定要注意这个信号的处理。切记
相关文章推荐
- linux网络通讯程序无提示自动退出——SIGPIPE信号退出
- linux下网络程序遭遇SIGPIPE信号进程退出的原因及规避方法
- 使用gdb调试网络程序时,收到SIGPIPE信号异常退出问题
- linux下网络程序遭遇SIGPIPE的解决(转)
- 配置linux 的Samba服务器和解决Windows访问Samba提示“无任何网络提供程序接受指定的网络路径”
- 在Linux下使用screen使用退出远程终端后程序依然自动进行
- Linux网络编程一步一步学-异步通讯聊天程序select
- 配置linux 的Samba服务器和解决Windows访问Samba提示“无任何网络提供程序接受指定的网络路径”
- linux下网络程序遭遇SIGPIPE的解决
- 如何在LINUX中开机、登陆、退出、定时、定期自动运行程序
- 如何在LINUX中开机、登陆、退出、定时、定期自动运行程序
- linux 遭遇SIGPIPE信号,导致进程退出的问题
- Linux程序退出时的信号捕获及处理
- 网络游戏服务器开发::学习了两天python写了一个linux下自动安装程序的脚本
- linux下网络程序遭遇SIGPIPE的解决(转)
- linux下网络程序遭遇SIGPIPE的解决(转)
- Process Monitor监测记录表明,QQ不仅会自动访问许多与聊天无关的程序和文档,例如“我的文档”等敏感位置,测试当天的上网记录也没能幸免。随后,QQ还会产生大量网络通讯,很可能是将数据上传到腾讯服务器。短短10分钟内,它访问的无关
- linux下简单的TCP服务端与客户端进行网络通讯的程序
- Linux-- 简单的程序守护脚本,程序异常退出后自动重启
- SIGPIPE信号引起程序退出