• Unix环境高级编程(九)信号


      信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号)。

      产生信号的条件:

    (1)当用户按某些终端键时,引发终端产生的信号。

    (2)硬件异常产生信号。

    (3)进程调用kill函数将信号发送给另外一个进程或进程组。

    (4)用户用kill命令将信号发送给其他进程。

    (5)检测到某种软件条件已经发送,并将其通知有关进程时候产生信号。

      内核在信号出现时候处理方式有:(1)忽略此信号,(2)铺捉信号,(3)执行系统默认动作。

    Unix系统信号如下:

     其中SIGKILL和SIGSTOP信号时不能忽略和捕获的,执行默认动作。

    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专用,进程超过资源限制的时候发送

  • 相关阅读:
    第010讲~第011讲:一个打了激素的数组
    练习15--阅读文件
    第007讲~第009讲:了不起的分支和循环
    第006讲:Python之常用操作符
    第005讲:闲聊之python的数据类型
    练习14--提示和传递
    第004讲:改进我们的小游戏
    ICPC Central Europe Regional Contest 2019 H. Ponk Warshall
    2019 ICPC Asia Yinchuan Regional G. Pot!!(线段树 区间更新 区间查询)
    CF1286A Garland
  • 原文地址:https://www.cnblogs.com/alantu2018/p/8466033.html
Copyright © 2020-2023  润新知