信号介绍
什么是中断:
-
当进程接收到消息后中止当前正在执行的任务,转而执行其它任务,等待其它任务执行完毕后再返回继续执行。这种执行模式称为中断,分为硬件中断和软件中断两种
什么是信号:
-
信号是UNIX、类UNIX以及其他POSIX兼容的系统中,为了完成不同进程之间通讯的一种方式。是一种软中断,是一种异步处理机制,用于提醒进程某个事件发生了,可能要去处理。
-
当一个信号发送给一个进程,操作系统就会中断该进程的正常控制流程,如果中断前预先设置过如何处理该信号(绑定过该信号的信号处理函数),那么中断后会执行该函数,执行完返回中断点继续执行,否则就按信号的默认处理方式进行
# 执行 kill -l 查看当前系统可以产生的所有信号 常见的信号: SIGINT(2) Ctrl+c 终止 SIGQUIT(3) Ctrl+\ 终止+core SIGFPE(8) 除0 终止+core SIGSEGV(11) 段错误 终止+core SIGTSTP(20) Ctrl+z 暂停 SIGCONT(18) fg 继续
不可靠信号与可靠信号
不可靠信号:
-
建立在早期信号处理机制上的信号被称为不可靠信号(1-31)
-
非实时信号,不支持排队机制,可能会丢失信号,同一个信号产生多次,进程可能只收到一次
-
当进程收到这类信号,执行了第一次用户设置的信号处理函数后,会还原会默认的处理方式。
可靠信号:
-
位于(34-64)的信号是可靠信号
-
实时信号,支持排队机制,信号只要产生就必定会被处理,因此不会丢失
信号的来源:
-
硬件异常:由硬件设备产生的信号,例如除零、非法访问内存、总线错误、未定义指令
-
软件异常:命令kill\函数产生信号
信号处理的默认动作:
-
忽略
-
终止进程
-
终止并产生core文件
-
捕获并处理