惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

WangDeer

非机动车交通规则测验 微软 50 周年壁纸是在 macOS上设计的? 「转」西二旗折叠:蜂巢经济学启示录 难得空明 Ubuntu Clean ApidocJs apigroup Support Chinese int(10)里面的10是什么意思? 5-3 会话 2021-03-25 「PHP架构师」面试准备 Laravel 上传 Docx 文件,表单验证不通过 4-4 发送信号 4-3 信号集 4-2 编写中断信号处理程序 2022-03-10 面试复盘 3-7 进程查看 3-6 SUID特权进程 3-5多进程编写 3-4进程调度 3-3进程exec 3-2进程退出和回收 3-1进程标识与fork 2-3解释器文件 2-2命令行参数与环境参数表 2-1程序与进程 1-1课程介绍 终极复盘 第八章 传承篇 第七章 自由篇 第六章 品牌篇 第五章 作品篇
4-1 什么是中断信号(软中断)
王二 · 2022-03-09 · via WangDeer

中断信号

指软件中断信号,简称软中断。

中断信号处理程序(信号处理函数,信号捕捉函数)完以后,就会返回继续执行主程序。

中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断,只是出于性能上的考量。如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。

引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。这样,在设备进行处理的周期内,处理器可以执行其他一些有意义的工作,而只付出一些很小的切换所引发的时间代价。后来被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面,并产生通过软件方式进入中断处理(软中断)的概念。

——中断

中断尽管可以提高计算机处理性能,但过于密集的中断请求/响应反而会影响系统性能。这类情形被称作中断风暴(interrupt storm)。

中断处理过程示意图

中断处理过程示意图

中断源

就是产生中断信号的单元。

  1. 在终端按下按键产生的中断信号 ctrl+c, ctrl+z, ctrl+\
  2. 硬件异常
  3. 在终端使用 kill 来发送中断信号
  4. posix_kill / kill(2) 函数、pcntl_alarm / alarm(2)函数
  5. 软件产生的中断信号 SIGURG [TCP/IP],SIGALRM

中断响应

对信号的处理。

  1. 忽略
  2. 执行中断处理函数(捕捉信号执行信号处理函数)
  3. 执行系统默认 signal ===> 动作[忽略,默认,执行用户编写好的信号处理函数]

中断返回

中断服务程序运行完之后返回。

信号对进程的影响:

  1. 直接让进程终止

  2. 让进程停止

    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.php
    

    [1]、[2]、[3] 为任务编号

    ctrl+z 它会让进程丢到后台去停止。

几个常用的中断信号

名称功能描述
SIGTSTP交互停止信号,终端挂起键 ctrl+z 终端驱动产生此信号 [终端停止符] 终止+core
SIGTERM可以被捕捉,让程序先清理一些工作再终止。[终止]
SIGSTOP作业控制信号,也是停止一个进程,跟 SIGTSTP 一样
SIGQUIT退出键 CTRL+\ 终端驱动程序产生此信号,同时产生core文件 [终端退出符]
SIGINT中断键 delete/ ctrl+c [终端中断符]
SIGCHLD子进程终止时返回
SIGUSR1 ,SIGUSR2用户自定义信号
SIGKILL SIGSTOP不能被捕捉及忽略的,主要用于让进程可靠的终止和停止