#include <stdlib.h> #include <sys/signal.h> void SetupSignal() { struct sigaction sa; //在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。 //这个信号的缺省处理方法是退出进程 //重载这个信号的处理方法,如果接收到一个SIGPIPE信号,忽略该信号 sa.sa_handler = SIG_IGN; sa.sa_flags = 0; //sigemptyset()用来将参数set信号集初始化并清空 if (sigemptyset(&sa.sa_mask) == -1 || sigaction(SIGPIPE, &sa, 0) == -1) { exit(-1); } } int main(int argc, char *argv[]) { SetupSignal(); while(1){} return 0; }
测试方法:
1.执行signal程序
通过另外的一个Linux终端查看程序使用的pid
ps -ef|grep signal
root 4234 3124 93 13:02 pts/3 00:00:06 ./signal
发送信号
kill -SIGPIPE 4234
可以看到signal程序不会退出
2.将main函数中SetupSignal();行注释掉编译
执行signal程序
通过另外的一个Linux终端查看程序使用的pid
ps -ef|grep signal
root 4253 3124 99 13:03 pts/3 00:00:02 ./signal
kill -SIGPIPE 4253
可以看到signal程序退出了