C语言之忽略SIGPIPE信号

来源:互联网 发布:海康网络键盘视频 编辑:程序博客网 时间:2024/05/31 13:16
#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程序退出了

0 0
原创粉丝点击