4-1 什么是中断信号(软中断)
中断信号 指软件中断信号,简称软中断。 中断信号处理程序(信号处理函数,信号捕捉函数)完以后,就会返回继续执行主程序。 中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断,只是出于性能上的考量。如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。 引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。这样,在设备进行处理的周期内,处理器可以执行其他一些有意义的工作,而只付出一些很小的切换所引发的时间代价。后来被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面,并产生通过软件方式进入中断处理(软中断)的概念。 ——中断 中断尽管可以提高计算机处理性能,但过于密集的中断请求/响应反而会影响系统性能。这类情形被称作中断风暴(interrupt storm)。 中断处理过程示意图 中断源 就是产生中断信号的单元。 在终端按下按键产生的中断信号 ctrl+c, ctrl+z, ctrl+\ 硬件异常 在终端使用 kill 来发送中断信号 posix_kill / kill(2) 函数、pcntl_alarm / alarm(2)函数 软件产生的中断信号 SIGURG [TCP/IP],SIGALRM 中断响应 对信号的处理。 忽略 执行中断处理函数(捕捉信号执行信号处理函数) 执行系统默认 signal ===> 动作[忽略,默认,执行用户编写好的信号处理函数] 中断返回 中断服务程序运行完之后返回。 信号对进程的影响: 直接让进程终止 让进程停止 SIGCONT 可以唤醒进程到前台继续运行 demo11.php <?php echo posix_getpid(); while (1){ ; } 发送 SIGSTOP 让进程停止之后 [1] Killed php demo11.php [2] Killed php demo11.php [3]+ Stopped php demo11.php $jobs [1]+ Stopped php demo11....