SIGPIPE导致的程序退出
如: signal(SIGPIPE,SIG_IGN);
这时SIGPIPE交给了系统处理。
服务器采用了fork的话,要收集垃圾进程,防止僵尸进程的产生,可以这样处理:
signal(SIGCHLD,SIG_IGN); 交给系统init去回收。
这里子进程就不会产生僵尸进程了。
在linux下写socket的程序的时候,如果尝试send到一个disconnected
socket上,就会让底层抛出一个SIGPIPE信号。
这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:
struct sigaction sa;
sa.sa_handler = SIG_IGN;
sigaction( SIGPIPE, &sa, 0 );
signal设置的信号句柄只能起一次作用,信号被捕获一次后,信号句柄就会被还原成默认值了.
sigaction设置的信号句柄,可以一直有效,值到你再次改变它的设置.
优质内容筛选与推荐>>
1、[Leetcode] Merge Two Binary Trees
2、判断Selenium加载完成
3、系统集成商的定义
4、JQuery Mobile - 修改复选框的选中状态无效解决办法!
5、[恢]hdu 2115