C语言之忽略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.执行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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值