10.Linux 高性能服务器编程 --- 信号

Linux 产生信号的条件:
	1.对于前台进程,用户可以输入特殊的终端字符来给它发送信号,如 ctrl+c
	2.系统异常。如浮点异常和非法内存访问
	3.系统状态变化。如 alarm 定时器到期引起的 SIGALRM 信号
	4.运行 kill 命令或者 kill 函数


信号处理函数是可重入的。


SIG_DEL : 忽略
SIG_IGN : 默认


中断系统调用:
	如果程序在执行处于阻塞状态的系统调用时收到信号,并且我们为这信号设置了信号处理函数,
	默认情况下,系统调用将被中断,并且设置 errno 为 EINTR 。我们可以使用 sigaction 函数,
	为信号设置 SA_RESTART 标志以重启被该信号中断的系统调用。


统一事件源:
	把信号的主要处理逻辑放在程序的主循环中,当信号处理函数被触发时,它只是简单的通知主循环接收到信号,
	并把信号值传递给主循环,主循环再根据接收到的信号值执行目标信号对应的逻辑代码。
	信号处理函数通常使用管道将信号"传递"给主循环:信号处理函数往管道的写端写入信号值,主循环则从管道的读端读出该信号值。
	那么,主循环怎么知道管道上何时有数据可读呢?很简单,我们只需要使用IO复用系统调用来监听管道的读端文件描述符上的可读事件。
	如此一来,信号事件就能和其他IO事件一样被处理,即统一事件源。


SIGHUP : 对于没有终端的网络后台程序而言,利用 SIGHUP 信号强制服务器重新读取配置文件

SIGPIPE : 往一个读端关闭的管道或socket 连接中写数据将引发 SIGPIPE 信号

SIGURG : Linux 下,内核通知应用程序带外数据到达有2种方式:
	一种是 IO 复用技术,select 等系统调用在接收到带外数据时返回,并向应用程序报告 socket上的异常事件。
	另外一种方法就是 SIGURG 信号。

 

10.1 Linux 信号概述

 

10.2 信号函数

 

10.3 信号集

 

10.4 统一事件源

10.5 网络编程相关信号

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值