标签:ups connected sig main while handle pip pipe oid
#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程序退出了
标签:ups connected sig main while handle pip pipe oid
原文地址:https://www.cnblogs.com/Malphite/p/10618655.html