文档章节

linux 信号机制

xxdd
 xxdd
发布于 06/20 20:11
字数 549
阅读 6
收藏 0
点赞 0
评论 0

signal(SIGPIPESIG_IGN);

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

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

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

signal(SIGPIPESIG_IGN);

这样, 第二次调用write方法时, 会返回-1, 同时errno置为SIGPIPE. 程序便能知道对端已经关闭.

 

signal(SIGINT, SIG_IGN); //当在终端上按下ctrl+c后,会产生SIGINT信号。

signal(SIGHUP, SIG_IGN); //终端退出时,会给所有的进程发送SIGHUP信号。

signal(SIGQUIT, SIG_IGN); //终端退出时,会给所有的进程发送SIGQUIT信号。

signal(SIGPIPE, SIG_IGN); //往没有读进程的管道中进行写操作。

signal(SIGTTOU, SIG_IGN); //后台进程写tty

signal(SIGTTIN, SIG_IGN); //后台进程读tty

signal(SIGCHLD, SIG_IGN); //父进程不接收子进程返回值,如果主进程先退出,不会出现僵尸进程。杀死主进程,子进程归init进程管理。

signal(SIGCHLD,SIG_DFL); //默认处理方式,是接收子进程的返回值。杀死主进程,子进程归init进程管理。

 

© 著作权归作者所有

共有 人打赏支持
xxdd
粉丝 3
博文 54
码字总数 13319
作品 0
海淀
程序员
深刻理解Linux进程间通信(IPC)

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实 验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信...

墙头草
2010/11/19
0
0
posix_kill 进程参数详解

http://blog.chinaunix.net/uid-24485075-id-3292539.html 定义的SIGKILL信号和SIGSTOP信号,因为它们为超级用户提供了一种使进程终止或停止的可靠方法。 Linux的信号机制基本上是继承UNIX的...

蜗牛奔跑
2017/10/20
0
0
内核同步机制

2.3 操作系统中,同时可能有多个进程(也包括内核进程)在执行,因此在内核中也需要考虑进程的同步和互斥机制,用来同步或互斥各进程对共享数据的访问.由于多个处理器系统是计算机系统的一个重要发...

xwisen
2014/07/07
0
0
linux设备驱动系列:如何处理竞态关系

综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争。 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时、并行...

东辉在线
2015/04/11
0
0
linux设备驱动第五篇:驱动中的并发与竟态

综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争。 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时、并行...

HAOMCU
2015/04/11
0
1
内核同步机制之Mutex Exclusion

S3C2440在内核版本2.6.34下开发ADC驱动时,会发现驱动程序里用了互斥通信来实现同步: 在wikipedia中式这么定义Mutex Exclusion的: In computer science, mutual exclusion refers to the ...

兔之
2014/01/03
0
0
LDD3阅读笔记之内核中的并发和竞态

一般驱动程序运行在内核态中,只能调用内核空间中提供的函数,因此在处理并发和竞态时不能使用用户空间提供的库,如pthread库,内核有着自己的一套内部实现机制。 并发及其管理 现代Linux系统...

开源中国精神科主任
2014/12/09
0
0
Linux 的 进程/线程 通信方式总结

linux系统中的进程通信方式主要以下几种: PIPE(FIFO) 消息队列 信号量(Semaphore) 共享存储 SOCKET 同一主机上的进程通信方式 UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(...

大数据之路
2012/10/05
0
0
Linux进程和线程间IPC机制

Linux进程间IPC 1.管道(Pipe)及有名管道(named pipe): 1、管道是半双工的,要实线读写需建立两根管道; 2、匿名管道用于父子进程或者兄弟进程之间(如forkexec创建的进程),命名管道允许没...

dodonei
04/16
0
0
linux c简单了解signal

一、什么是信号 1、 信号就是软件中断,很多的程序都需要处理信号。信号提供了一种处理异步事件的机制。 例如:当用户在终端下运行一个程序时,用户在键盘键入一个中断键(CTRL+C),则会通过信...

OscerSong
2013/03/10
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

庆祝自己过了ACP!!

经过三个月的努力,ACP终于过了,但这只是敏捷实践的开始,路还长

talen
5分钟前
0
0
markdown

首次使用Markdown写博客,好激动! Hexo在Github中搭建博客系统(5)Markdown语法 Hexo在Github中搭建博客系统(5)Markdown语法

miaojiangmin
6分钟前
0
0
10.34 linux系统日志 10.35 screen工具

liunx系统日志 内容: • /var/log/messages • /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 • dmesg命令 • /var/log/dmesg 日志 • last命令......

Linux_老吴
6分钟前
0
0
java 重写排序规则,用于代码层级排序

1.dataList 是个List<Map<String,Object>> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空。 2.dataList 类型是由自己定义的,new Comparator<Map<String,Object>> 也是对应......

轻量级赤影
13分钟前
0
0
分布式大型互联网企业架构!

摘要: 开发工具 1.Eclipse IDE:采用Maven项目管理,模块化。 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码...

明理萝
13分钟前
0
1
对MFC程序的一点逆向分析:定位按钮响应函数的办法

因为消息响应函数保存在AFX_MSGMAP_ENTRY数组中, 观察nMessage、nCode、nID、pfn利用IDA在rdata段中搜索即可, 在IDA中找到代码段基址0x401000,函数地址0x403140, 在WinDbg中运行!addre...

oready
14分钟前
0
0
阻抗匹配与史密斯(Smith)圆图基本原理

参考:http://bbs.eeworld.com.cn/thread-650695-1-1.html

whoisliang
19分钟前
0
0
maven配置文件分离

一、 简介 遇到很多次别人处理的项目,测试环境,本地开发和线上环境的配置不一样,每一次部署都要重新修改配置文件,提交审核代码,才能打包,非常不方便。 其实相信很多人都知道可以使用m...

trayvon
19分钟前
0
0
MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
35分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
43分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部