linux的信号来源
1.由一个进程发给另一个进程(或本身)
2.内核发给进程
信号的特征
异步的,分为可靠信号和不可靠信号。
进程收到信号时怎么处理
1.执行信号处理程序
2.如果收到信号时处在一个阻塞函数中,中断当前系统调用并执行信号处理程序
3.如果想要信号处理程序后恢复被中断的系统调用,需要设置SA_RESTART标志,是否奏效依赖于不同的系统。
信号的三种处理方式
1.自定义处理动作,并通过signal或者sigaction将自定义信号处理函数和信号关联起来。
2.设置信号的处理动作为SIG_IGN来忽略它
3.设置信号的处理动作为SIG_DFL,采用默认处理动作,默认处理动作一般是退出进程,也有的是产生core文件,还有的信号是忽略掉。
SIGKILL和SIGSTOP不能被捕捉,也不能被自定义处理和忽略处理。
信号处理程序会不会被信号打断
1.posix允许我们定义一组信号,当信号处理程序被调用时阻塞它们。任何阻塞的信号不能被递交给进程,posix保证信号处理程序运行时被捕获的信号是阻塞的。
2.linux保证信号处理程序不会被另一个信号打断
不可靠信号和可靠信号的差别
是否排队,不可靠信号会把相同信号合并为一个,而可靠信号会把收到的信号排队。当信号产生的速度大于信号处理的速度,不可靠信号会丢失信号。
信号的应用
信号处理函数不要调用不可重入函数,比如标准库的printf、malloc等,尽量简单点,不做实际工作,比如设置进程退出flag,合适退出交给线程和进程判断flag并在合适时候退出。

慢系统调用需要处理的信号中断错误
当一个慢系统调用被信号打断时,会返回EINTR作为返回值,这不是错误,需要再次调用该系统调用。
大多数网络的阻塞调用:accept、read都属于慢系统调用。

最新文章

  1. Python_进程、线程及协程
  2. Express实现http和https服务
  3. [译]GotW #4 Class Mechanics
  4. linux的find指令详解。
  5. magento 获取attribute的所有option
  6. java 数据结构 队列的实现
  7. Java编写高质量代码改善程序的151个建议
  8. 基于keil平台下STM32L系列移植FreeRTOS操作系统
  9. 更新下载库update绝对详解
  10. 根据不同浏览器判断OCX插件是否安装
  11. Python3学习笔记01-环境安装和运行环境
  12. 与HTTP关系密切的三个协议:IP,TCP,DNS
  13. MongoDB NoSQL 常用指令
  14. Partition4:增加分区
  15. Python输出信息
  16. jrMz and angles(水题)
  17. poj2914-Minimum Cut
  18. 【BZOJ】2125: 最短路 圆方树(静态仙人掌)
  19. iOS开发之--TableViewCell重用机制避免重复显示问题
  20. 查看已安装tensorflow版本以及安装路径

热门文章

  1. eoLinker GoKu Gateway 开源版 V2.1发布,加入UI管理系统等
  2. MATLAB图形界面设计(上)
  3. 【maven】成功生成jar包,提示找不到主类?
  4. TFS代码迁移Git
  5. Java设计模式之 — 策略(Strategy)
  6. 第一次训练 密码:acmore
  7. 关于使用sudo命令后找不到JAVA_HOME的问题
  8. innodb_support_xa=1
  9. [Python] Create a minimal website in Python using the Flask Microframework
  10. Web API接口设计(学习)