当前位置:网站首页 > 技术博客 > 正文

sigfpe信号



TCP是全双工的信道,可以看作两条单工信道,TCP连接的两个端点各负责一条。当对端调用close,虽然本意是关闭整个两条信道,但本端只是收到FIN包。按照TCP协议的语义,表示对端只是关闭了其所负责的那一条单工信道,任然可以继续接收数据。也就是说,因为TCP协议的限制,一个端点无法获知对端的socket是调用了close还是shutdown。

例子:A和B使用TCP传输文件。现在B调用close,清空自己的接收缓存,A 往 B write(发送)数据。

如果接收缓冲已空, 则返回0, 这就是常说的表示连接关闭。但第一次对其调用write方法时,如果 A 发送数据到 B 的缓存没问题,会返回正确写入,但 A 发送的报文会导致B发送RST报文,因为 B 的socket已经调用了close,完全关闭,既不发送,也不接收数据。所以 A 第二次调用write方法(假设在收到 RST 报文之后),会生成 SIGPIPE 信号,导致进程退出。

为了避免进程退出,可以捕获 SIGPIPE 信号,或者忽略它,给他设置 SIG_IGN 信号处理函数。

unix环境下,当一个进程以后台形式启动,但尝试去读写控制台终端时,将会触发 SIGTTIN(读) 和 SIGTTOU(写)信号量,接着,进程将会暂停(linux默认),read/write将会返回错误。

这时,shell将会提醒用户切换此进程为前台进程,以便继续执行。后台切换至前台的命令。

前台转为后台则为 CTRL+Z 快捷键

那么如何才能不把进程切换至前台的情况下,读写控制器不会被暂停? 答案:只要忽略 SIGTTIN 和 SIGTTOU 信号量即可

程序结束(terminate)信号,软件终止信号。与SIGKILL不同的是该信号可以被阻塞和处理,通常用来要求程序自己正常退出

内存访问错误导致进程终止。(Segmentation fault)

版权声明


相关文章:

  • 测试cpu的性能指标2024-11-21 18:01:02
  • python基础入门教程2024-11-21 18:01:02
  • html表单属性有哪些2024-11-21 18:01:02
  • 桥接成功却无法上网2024-11-21 18:01:02
  • 86版五笔字型2024-11-21 18:01:02
  • 预测模型的构建及应用2024-11-21 18:01:02
  • 使用ssh实现远程登录linux2024-11-21 18:01:02
  • css中设置溢出隐藏2024-11-21 18:01:02
  • c解析json字符串2024-11-21 18:01:02
  • uboot bootz2024-11-21 18:01:02