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

推荐订阅源

大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
M
MIT News - Artificial intelligence
量子位
N
Netflix TechBlog - Medium
The Cloudflare Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
B
Blog
博客园_首页
博客园 - Franky
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
H
Help Net Security
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell

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不能被捕捉及忽略的,主要用于让进程可靠的终止和停止