SOCKET 一方中断导致进程死掉的解决方案
2010-08-24 18:18
148 查看
当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据
时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则SIGPIPE信号的默认执行动作是
terminate(终止、退出), 所以client会退出。
若不想客户端退出可以把 SIGPIPE设为SIG_IGN
如: signal(SIGPIPE,SIG_IGN);
这时SIGPIPE交给了系统处理。
服务器采用了fork的话,要收集垃圾进程,防止僵死进程的产生,可以这样处理:
signal(SIGCHLD,SIG_IGN);
交给系统init去回收。
这里子进程就不会产生僵死进程了。
时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则SIGPIPE信号的默认执行动作是
terminate(终止、退出), 所以client会退出。
若不想客户端退出可以把 SIGPIPE设为SIG_IGN
如: signal(SIGPIPE,SIG_IGN);
这时SIGPIPE交给了系统处理。
服务器采用了fork的话,要收集垃圾进程,防止僵死进程的产生,可以这样处理:
signal(SIGCHLD,SIG_IGN);
交给系统init去回收。
这里子进程就不会产生僵死进程了。
相关文章推荐
- Android 开发:加载未安装apk图标-拔出U盘导致进程被杀的解决方案
- OGG-01031 由于网络中断导致datapump进程ABENDED的恢复方法
- 中断中I2C通信导致进程调度或者睡眠
- 关于Oracle10.2.0自行启动两个监听进程导致服务中断问题
- BOOST::ASIO多线程下socket关闭导致进程崩溃问题定位及解决
- 关于Oracle10.2.0自行启动两个监听进程导致服务中断问题
- centos系统中perl进程病毒占用大量网络流量导致网络瘫痪的问题分析及解决方案
- hadoop海量put时出现的socket超时导致put失败解决方案
- Windows XP自动更新导致svchost.exe进程CPU占用率100%解决方案
- centos系统中perl进程病毒占用大量网络流量导致网络瘫痪的问题分析及解决方案
- socket写数据导致进程跨掉
- Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理
- SocketInputStream.socketRead0 导致线程hangs的解决方案
- nginx_mod_h264_streaming-2.2.7模块遇到不完整MP4文件导致nginx进程死掉( truncated mp4 make nginx crash)
- 单元测试报connection is allready closed导致dailybuild中断的解决方案——类加载机制的应用
- Windows xp 自动更新导致svchost.exe进程CPU占用率100%解决方案
- 监听socket被子进程继承导致的通信问题
- Linux系统网络编程中TCP通讯socket--send导致进程被关闭
- Virtualbox正在运行虚拟机,被强制中断导致虚拟机无法启动(start按钮为灰色)解决方案
- MonitorServer代码阅读笔记(一):使用sigaction( SIGPIPE, &sa, 0)避免写一个已关闭的socket导致进程退出