zoukankan      html  css  js  c++  java
  • 学习unix信号

    信号(signal):通知进程已发生某种情况的技术,例如:,某个进程执行了除法操作,其除数为0,则将名为SIGFPF(浮点异常)的信号发送给该进程,进程如何处理信号有三种选择:

    1.忽略该信号,有些信号表示硬件异常,例如,除以0或者范围进程地址空间以外的单元等,因为这些异常产生的异常后果不确定,所以不推荐使用这种处理方式。

    2.按照系统默认方式处理,对于除以0的情况,系统默认是终止该进程。

    3.提供一个函数,信号发生时则调用该函数,扑捉改信号,使用这种方式,我们只要调用我们自己为此设定的函数,就能知道什么时候产生了信号,并做好处理方式。

    下面的情况可以产生Signal:

    1. 按下CTRL+C产生SIGINT
    2. 硬件中断,如除0,非法内存访问(SIGSEV)等等
    3. Kill函数可以对进程发送Signal
    4. Kill命令。实际上是对Kill函数的一个包装
    5. 软件中断。如当Alarm Clock超时(SIGURG),当Reader中止之后又向管道写数据(SIGPIPE),等等

    Signal Description
    SIGABRT 由调用abort函数产生,进程非正常退出
    SIGALRM 用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
    SIGBUS 某种特定的硬件异常,通常由内存访问引起
    SIGCANCEL 由Solaris Thread Library内部使用,通常不会使用
    SIGCHLD 进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略
    SIGCONT 当被stop的进程恢复运行的时候,自动发送
    SIGEMT 和实现相关的硬件异常
    SIGFPE 数学相关的异常,如被0除,浮点溢出,等等
    SIGFREEZE Solaris专用,Hiberate或者Suspended时候发送
    SIGHUP 发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送
    SIGILL 非法指令异常
    SIGINFO BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程
    SIGINT 由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程
    SIGIO 异步IO事件
    SIGIOT 实现相关的硬件异常,一般对应SIGABRT
    SIGKILL 无法处理和忽略。中止某个进程
    SIGLWP 由Solaris Thread Libray内部使用
    SIGPIPE 在reader中止之后写Pipe的时候发送
    SIGPOLL 当某个事件发送给Pollable Device的时候发送
    SIGPROF Setitimer指定的Profiling Interval Timer所产生
    SIGPWR 和系统相关。和UPS相关。
    SIGQUIT 输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程
    SIGSEGV 非法内存访问
    SIGSTKFLT Linux专用,数学协处理器的栈异常
    SIGSTOP 中止进程。无法处理和忽略。
    SIGSYS 非法系统调用
    SIGTERM 请求中止进程,kill命令缺省发送
    SIGTHAW Solaris专用,从Suspend恢复时候发送
    SIGTRAP 实现相关的硬件异常。一般是调试异常
    SIGTSTP Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程
    SIGTTIN 当Background Group的进程尝试读取Terminal的时候发送
    SIGTTOU 当Background Group的进程尝试写Terminal的时候发送
    SIGURG 当out-of-band data接收的时候可能发送
    SIGUSR1 用户自定义signal 1
    SIGUSR2 用户自定义signal 2
    SIGVTALRM setitimer函数设置的Virtual Interval Timer超时的时候
    SIGWAITING Solaris Thread Library内部实现专用
    SIGWINCH 当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程
    SIGXCPU 当CPU时间限制超时的时候
    SIGXFSZ 进程超过文件大小限制
    SIGXRES Solaris专用,进程超过资源限制的时候发送

  • 相关阅读:
    leetcode 86. Partition List
    leetcode 303. Range Sum Query
    leetcode 1310. XOR Queries of a Subarray
    leetcode 1309. Decrypt String from Alphabet to Integer Mapping
    leetcode 215. Kth Largest Element in an Array
    将numpy.ndarray写入excel
    leetcode 1021 Remove Outermost Parentheses
    leetcode 1306. Jump Game III
    leetcode 1305. All Elements in Two Binary Search Trees
    ICCV2019 oral:Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff in Single Image Super-Resolution
  • 原文地址:https://www.cnblogs.com/candycaicai/p/1979929.html
Copyright © 2011-2022 走看看