当前位置:嗨网首页>书籍在线阅读

21-信号

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

1.4.5 信号

信号是一种单向异步通知机制。信号可能是从内核发送到进程,也可能是从进程到进程,或者进程发送给自己。信号一般用于通知进程发生了某些事件,如段错误或用户按下Ctrl-C。

Linux内核实现了约30种信号(准确数值和每个体系结构有关)。每个信号是由一个数值常量和文本名表示。举个例子,SIGHUP用于表示终端挂起,在x86-64体系结构上值为1。

信号会“干扰”正在执行的进程,不管当前进程正在做什么,都会立即执行预定义的操作。除了SIGKILL(进程中断)和SIGSTOP(进程停止),当进程接收到信号时,可以控制正在执行的操作。进程可以接受默认的信号处理操作,可能是中断进程、中断并coredump进程、停止进程或者什么都不做,具体的操作取决于信号值。此外,进程还可以选择显式忽略或处理信号。忽略的信号会被丢弃,不做处理。处理信号会执行用户提供的信号处理函数,程序接收到信号时会立即跳到处理函数执行。当信号处理函数返回时,程序控制逻辑将返回之前终端的指令处继续执行。由于信号的异步性,信号处理函数需要注意不要破坏之前的代码,只执行异步安全(async-safe,也称为信号安全)的函数。