码迷,mamicode.com
首页 > 其他好文 > 详细

忽略SIGPIPE信号

时间:2019-03-29 01:00:14      阅读:198      评论:0      收藏:0      [点我收藏+]

标签: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程序退出了

 

忽略SIGPIPE信号

标签:ups   connected   sig   main   while   handle   pip   pipe   oid   

原文地址:https://www.cnblogs.com/Malphite/p/10618655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!