zoukankan      html  css  js  c++  java
  • 信号概念

    程序在执行的时候,几乎任何时刻都会发生事件。
    信号通常用来向一个进程通知事件。
    信号是不可提前预知的,所以信号是异步的
    信号随时都可能发生,接收信号的进程也可以没有控制权。
    每个信号名都以SIG开头,信号名的定义在<signal.h>中。
     
     
    许多情况下都会出现信号,如硬件异常,非法的内存引用,软件异常等等。
    前面讲过的kill函数就是向目标进程发一个SIGKILL信号,就和kill命令一样。
    当进程收到一个信号,它可以对信号采取如下三种措施之一
      –忽略这个信号;
      –捕获这个信号,这需要执行一段称为信号处理器的特殊代码;
      –允许执行信号的默认操作。
     
    当信号发生的事件出现时,比如硬件异常,就会产生一个针对具体进程的信号。
    当进程对发送给它的信号采取措施的时候,就叫该信号被传送。
    产生信号和递送信号之间的时间间隔称为信号未决。
    递送信号可以被阻塞或延迟。
    一个信号一直被延迟,直到接触阻塞或接到进程对该信号的部署方式改变为忽略为止。
     
     
    信号的部署是指进程如何响应信号。
    进程可以忽略信号、用默认操作处理信号、响应这个信号。
    进程不能简单的通过判断一个变量,例如errno来判断是否出现了一个信号。
     
     
     
    常见信号说明

    信号名

    说明

    SIGABRT

    调用abort产生此信号,进程异常终止。

    SIGALRM

    调用alarm设置计时器超时时,产生此信号。

    SIGHLD

    一个进程终止时发送该信号给其父进程。

    SIGFPE

    表示一个算数运算异常,例如除以0

    SIGINT

    用户按Ctrl+C键,产生该信号

    SIGKILL

    这是个不能被捕捉或忽略的信号,kill 9发送该信号

    SIGPIPE

    如果在写到管道时读进程已经终止,就产生该信号

    SIGSEGV

    该信号指示进程进行了 一次无效的内存引用

    SIGTERM

    由kill命令(1)发送的系统默认终止信号

    SIGTSTP

    用户按Ctrl+Z键产生该信号

    SIGUSR1

    用户定义信号,可用于应用程序

    SIGUSR2

    用户定义信号,可用于应用程序

  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/shichuan/p/4496331.html
Copyright © 2011-2022 走看看