忽略SIGPIPE信号
Posted malphite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了忽略SIGPIPE信号相关的知识,希望对你有一定的参考价值。
#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、编译并执行如上代码,
gcc -o sigpipe sigpipe.c
通过另外的一个Linux终端执行killall -SIGPIPE sigpipe
可以看到sigpipe 程序不会退出
2、将main函数中SetupSignal();行注释掉编译
通过另外的一个Linux终端执行killall -SIGPIPE sigpipe
可以看到signal程序退出了
以上是关于忽略SIGPIPE信号的主要内容,如果未能解决你的问题,请参考以下文章