zoukankan      html  css  js  c++  java
  • 深入理解Linux内核-信号

    信号:
    1、最初被引入作为用户态进程间通信
    2、内核也使用信号通知进程系统所发生的事件
    3、信号很短,发送给进程的唯一信息通常是一个数。
    4、名称通常以SIG为前缀
    5、信号时可消费资源,每个信号只能被传递一次

    使用信号的目标:
    1、让进程知道已经发送了一个特定的事件
    2、强迫进程执行它自己代码中的信号处理程序。

    信号分两类:
    1、常规信号(regular signal):编码范围(0~31),同种类型的常规信号并不排队,一个常规信号被发送多次,只有其中一个被收到。
    2、实时信号(real-time signal):编码范围(32~64),需要排队,以便多个信号都能被收到
    3、Linux内核并不使用实时信号。

    信号传递的两个不同阶段:
    1、信号产生:内核更新目标进程的数据结构以表示一个新的信号已被发出。
    2、信号传递:内核强迫目标进程通过以下方式对信号作出反应:a、改变目标进程的执行状态;b、开始执行一个特定的信号处理程序;c、两者都是。

    挂起信号(pending signal):
    1、已经产生还没有传递到信号;
    2、任何时候一个进程仅存在给定类型的一个挂起信号;相同的其他信号不排队,简单的丢弃掉
    3、如果是实时信号,同种类型的挂起信号可以有好几个,它支持排队。

    信号处理程序:
    1、不必是可以重入的,相同类型的信号再次出现不会中断正在进行的信号处理程序,它会被屏蔽。

    进程应答信号的三种方式:
    1、显式的忽略信号
    2、执行与信号相关的缺省操作terminate、dump、ignore、stop、continue。
    3、通过调用相应的信号处理函数捕获信号。

    信号阻塞和忽略的差异:
    1、信号被阻塞,它就不被传递,只有解除阻塞后才被传递
    2、信号被忽略,它还是被传递,只是不被处理

    SIGKILL、SIGSTOP 这两个信号不能被阻塞、忽略、捕获;接收到的进程必须执行它们对应的缺省操作。










  • 相关阅读:
    Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
    Python3 运算符
    Python3 注释
    Python3 解释器
    Python3 环境搭建
    Python 3 教程
    Python3 基本数据类型
    趣闻|Python之禅(The Zen of Python)
    ios开发笔记根据传入字符串的长度动态生成label,并按照屏幕宽度排列
    iOS开发设置tableview的分割线
  • 原文地址:https://www.cnblogs.com/lipeil/p/4736949.html
Copyright © 2011-2022 走看看