• linux C信号


    • 信号的定义
    信号只不过是一个标志信息,并不能携带大量数据,进程会从内核收到信号,并按照约定执行一段代码体(响应信号),再继续执行其他代码,实际上这样一来,信号是一种软中断
    严格地说进程A不能直接给进程B发送信号,而是借助内核完成信号的发送,同样进程B也是通过内核完成对信号的处理
    • 信号四要素
    1. 编号
    2. 名称
    3. 事件
    4. 默认处理方式
    linux 下 kill -l可以显示所有信号 其中1-31较为常用

    输出结果:

    • 信号产生的方式
    1. 按键产生 ctrl+z,ctrl+\,ctrl+s
    2. 系统调用产生 kill raise abort
    3. 软件条件产生 alarm(定时器)
    4. 异常产生:例如段错误(非法内存访问),除0,内存对其错误(总线错误)
    5. 命令产生kill
    • 信号分类:
    1. 终止Term(例如:SIGHUP)
    2. 暂停Stop
    3. Core生成文件记录进程死掉的原因(例如:SIGSEGV)
    4. Ign忽略信号
    5. 恢复执行Cont
    • 信号的状态:递达(递送且到达)或未决(因为阻塞而暂时终止)
    • 不允许忽略和捕捉的信号SIGKILL SIGSTOP----例如对于病毒程序,必须杀掉其进程。而在这之前,病毒可能把其他信号都变成忽略或捕捉!
    • PCB包含了未决信号集和信号屏蔽字(阻塞信号集)
    未决信号集和阻塞信号集从组织形式上看都是一组信号,我们不妨以1-32来标记每个不同的信号种类,以按下按键ctrl+c为例,如果按下按键后会发送信号2,那么两组信号可能经历的变化如下:

    执行前:

    未决信号集中的信号2,状态为0----也就是处于“已决”状态----(双重否定等于肯定假的未决----就是已决)

    按下按键后:

    未决信号集中的信号2,状态为1(但是如果阻塞信号集中信号标识为1,那么未决信号集中的信号2将保持状态为1)

    目标进程收到信号后:

    未决信号集中的信号2,转态又变为0

    这一变化过程有个很雅的词叫做翻转

    • 信号的处理方式
    1. 执行默认动作
    2. 忽略(丢弃)
    3. 捕捉(用户处理函数)
  • 相关阅读:
    mysql是如何启动的?
    qt终于安装成功
    随笔
    博客首写
    为什么你预约不了政府特供口罩-太难了
    jQuery 选择器(转)
    [JS]Cookie精通之路
    存储过程分页 简单列子
    泛型集合List<T> Dictionary<K,V>
    数据绑定控件
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12165913.html
Copyright © 2020-2023  润新知