• 信号与信号处理


    信号的来源,种类,进程对信号的响应。

    信号的捕获,发送,屏蔽。

    -------------------------------------------------------------

    信号是一种软中断,它提供了一种处理异步事件的方式,也是进程间唯一的异步通信方式。根据POSIX标准扩展以后的信号机制,不仅可以

    用来通知进程发生了什么事件,还可以给进程传递数据。

    -------------------------------------------------------

    信号的来源:

    1、硬件方式:

    在终端按下某些键时,产生信号。如Ctrl+C将产生SIGINT信号

    硬件异常检测信号:除数为0,无效的存储访问等。这些事件通常由硬件(CPU)检测到,并将其通知给操作系统内核,然后由内核生成相应的信号,

    并把信号发送给该事件发生时正在运行的程序。

     

    2、软件方式:

    在终端下使用kill命令向进程发送任意信号

    进程调用kill或sigqueue函数发送信号

    当检测到某种软件条件具备时发出信号,如由alarm或settimer设置的定时器超时,将生成SIGALRM信号。

    ------------------------------------------------------------------

    信号的种类:

    在终端输入  kill -l 可以显示Linux支持的全部信号。

    信号的值定义在:signal.h中

     

    1、可靠信号与不可靠信号:

     可靠信号也称为实时信号。

    信号的可靠性是指信号是否支持排队。

    信号产生后,内核通常会在进程表中设置某种形式的标志。当内核设置了这个标志,我们就是内核向进程递送了一个信号。

    信号的产生和递送之间的时间间隔,称为信号未决。

    进程可以调用sigpending将信号设置为阻塞,如果为进程产生了一个阻塞的信号,而对该信号的动作是捕捉该信号(即不是忽略信号)

    则内核将为该进程的此信号保持为未决信号,直到该进程对此信号解除阻塞或将对此信号的响应更改为忽略。如果在进程解除对某个信号

    的阻塞之前,这种信号发生了多次,那么如果如果信号被递送多次(即信号在未决信号队列里面排队),则称之为可靠信号。

    只被递送一次的信号成为不可靠信号。

     

    2、信号的优先级:

    信号实质上是软中断,中断有优先级,信号也有优先级。如果一个进程有多个未决信号,则对于同一个未决的实时信号,内核将按照发送的顺序来递送信号。如果

    存在多个未决的实时信号,则值(或者说编号)越小的越先被递送。如果既存在不可靠信号,又存在实时信号(可靠信号),虽然POSIX对这一情况没有明确规定,

    但linux系统和大多数遵循POSIX标准的操作系统一样。将优先递送不可靠信号。

     

    -------------------------------------------------------------------

    进程对信号的响应:

    1、捕捉信号

     对于要捕捉的信号,可以为其指定信号处理函数,信号发生时该函数自动被调用,在该函数内部实现对信号的处理。

    2、忽略信号

    注意:SIGKILL和SIGSTOP这两个信号不能被忽略,同时这两个信号也不能被捕获和阻塞。此外,如果忽略某些硬件产生的

    信号(如非法存储访问或除以0),则进程的行为是不可预测的。

     

    3、按照系统默认方式处理。

    大部分信号的默认操作是终止进程,且所有的实时信号的默认动作都是终止进程。

     

  • 相关阅读:
    Ubuntu的网络共享
    一次网络请求是如何实现的
    一次web请求发生的神奇故事
    Header解析
    Shiro入门指引
    Shiro入门资源整理
    Shiro在SpringBoot中的使用
    Shiro源码解析-Session篇
    Shiro源码解析-登录篇
    9.nginx使用redis用缓存
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/6567610.html
Copyright © 2020-2023  润新知