美文网首页
SIG信号捕获

SIG信号捕获

作者: 生产八哥 | 来源:发表于2021-07-20 16:11 被阅读0次

main.m里的SIG信号捕获
main.m有如下代码

 struct sigaction sa;
 sa.sa_handler = SIG_IGN;
 sigemptyset(&sa.sa_mask);
 sa.sa_flags = 0;
 if (sigaction(SIGPIPE, &sa, NULL) < 0)
 {
     print("cannot ignore SIGPIPE");
     return -1; 
 }

可能部分人不是很明确这块代码的意义,之前工作时遇到过一种崩溃,好像是socket长连接导致的crash

当服务器close一个连接时,若client端接着发数据,根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开,不要再写了。而根据信号的默认处理规则,SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。

所以苹果建议这类信号不用处理。

解决方案

切换到后台时,关闭长连接和管道,回到前台重新创建
使用signal(SIGPIPE、SIG_IGN),将SIGPIP交给系统处理,这么做将SIGPIPE设为SIG_IGN,使客户端不执行默认操作,即不退出

相关文章

  • SIG信号捕获

    main.m里的SIG信号捕获main.m有如下代码 可能部分人不是很明确这块代码的意义,之前工作时遇到过一种崩溃...

  • Signal

    发送信号 捕获信号 发送给自己(alarm、reise、abort) 发送给指定进程(kill) 带参信号(sig...

  • sigaction的使用

    sigaction结构体定义 sa_handler:信号处理器函数的地址,亦或是常量SIG_IGN、SIG_DFL...

  • APUE信号

    第10章 信号 信号是软件中断 信号提供了一种处理异步事件的方法 10.2 信号概念 信号都以SIG开头 信号名都...

  • 异常捕获和分析

    主要内容 闪退捕获 日志分析 闪退捕获 内核级异常:Mach异常->Unit信号(Mach层捕获到异常通过发送信号...

  • 信号集

    1.信号集操作函数 函数声明 参数 set为 sigset_t 类型,即信号集,signum为信号 返回值 sig...

  • linux 信号机制

    1. Linux支持的信号列表如下。很多信号是与机器的体系结构相关的 信号值 默认处理动作 发出信号的原因 SIG...

  • 信号(一)

    2016-02-15 信号 信号概念 每个信号都有一个名字,这些名字都以三个字符SIG开头。eg SIGABRT ...

  • RAC基础

    获得信号的方式 1.Cocoa桥接 2.信号变换 3.序列转换RACSignal * sig4 = [RACSeq...

  • golang信号处理

    信号是IPC之一,下面是常用的信号列表 信号值动作说明SIGHUP1Term终端控制进程结束(终端连接断开)SIG...

网友评论

      本文标题:SIG信号捕获

      本文链接:https://www.haomeiwen.com/subject/hvzwyltx.html