Linux高性能服务器编程:信号

信号是由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。

 

1.发送信号

int kill(pid_t, int sig);

2.中断系统调用

如果程序在执行处于阻塞状态的系统调用时接收到信号,并且我们为该信号设置了信号处理函数,则默认情况下系统调用将被中断,并且errno被设置成EINTR。

 

3.信号函数

signal系统调用;

sigaction系统调用

 

4. 统一事件源

 信号是一种异步事件:信号处理函数和程序的主循环是两条不同的执行路线。信号处理函数需要尽可能快地执行完毕,

以确保该信号不被屏蔽太久。一种解决方案是:把信号的主要处理逻辑放到程序的主循环中,当信号处理函数被触发时,它只是简单地通知主循环程序接收到信号,并把信号值传递给主循环,主循环再根据接收到的信号值执行目标信号对应的逻辑代码。

 

5. 网络编程相关信号

SIGHUP:  当挂起进程的控制终端时,SIGHUP信号将被触发。对于没有控制终端的网络后台程序而言,通常利用SIGHUP信号来强制服务器重读配置文件。

SIGPIPE:默认情况下,往一个读端关闭的管道或socket连接中写数据将引发SIGPIPE信号。需要再代码中捕获并处理该信号,或者忽略,因为程序收到SIGPIPE信号的默认行为是结束进程。

posted @ 2020-02-28 19:02  c++11  阅读(238)  评论(0编辑  收藏  举报