• 信号
  • 术语解释
  • 信号类型
  • 信号产生
    • 通过键盘终端
    • 通过kill命令
    • 调用系统函数
  • 信号处理

    信号

    信号是一种进程间通信(IPC)机制,主要用于处理异步事件。

    不同的Unix衍生版所支持的信号类型并不完全相同。除了支持POSIX规定的信号外,还支持其他信号。

    术语解释

    术语 解释
    生成信号 发生了一个需要引起进程注意的事件而导致信号出现时。也叫发送信号
    信号交付 被发送信号的那个进程识别到了信号并采取了适当动作。也叫接收信号
    信号句柄 当信号出现时调用进行专门处理的函数。这个函数称为捕获函数或信号句柄
    信号捕获 若信号交付时进程执行信号句柄,称进程捕获了信号
    悬挂信号 当一个信号已经生成,但还未交付时,称该信号是悬挂的

    信号类型

    Linux支持62个信号。可以通过在终端输入kill -lman 7 signal来查看。本页附录也有记录。

    信号的宏定义和编号都定义在signal.h中。

    信号产生

    信号的产生方式多种多样,主要有3种:

    • 程序错误
      • 程序异常,如零做除数
      • 进程超越CPU或文件大小的限制
    • 外部事件
      • 通过键盘终端
    • 显示请求
      • kill命令(或函数)

    通过键盘终端

    组合键 信号
    Ctrl+C SIGINT
    Ctrl+\ SIGQUIT
    Ctrl+Z SIGSTOP

    通过kill命令

    1. kill -信号编号 进程号 #比如 kill -15 4264
    2. kill -信号的宏定义 进城号 #比如 kill -SIGTERM 4264

    调用系统函数

    • [[kill|kill]]
    • [[raise|raise]]
    • [[alarm|alarm]]
    • [[abort|abort]]

    信号处理

    主要有3种:

    1. 忽略信号,对该信号不做处理,进程继续执行。但SIGKILLSIGSTOP不能忽略
    2. 捕捉信号,使进程执行指定的程序代
    3. 默认处理方法,系统为每一个信号都设置了默认处理方法,通常为终止进程:
      • 流产
      • 终止
      • 忽略
      • 挂起
      • 继续

    还有其他的一些处理方法,比如将信号挂起,不影响当前程序的执行,待需要时再处理该信号。