第八章-异常控制流(2)

信号

一个信号就是一条小消息,通知进程系统中发生了一个某种类型的事件。

通常异常都是由内核异常处理程序进行处理的,正常情况下,对用户进程是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。

传送一个信号到目的进程的步骤:

image.png
image.png

image.png
  1. 进程组:
    每个进程都属于一个进程组。通常父进程和子进程属于同一个进程组。
    可以通过函数改变某个进程的进程组。
  2. 发送信号
  • /bin/kill
    可以发送任意信号,其中杀死进程的信号是 /bin/kill -9 pid
    杀死进程组: /bin/kill -9 -15231(进程组PID)
  • 键盘发送信号
    Ctrl+C会发送SIGINT到前台进程组中的每个进程,默认情况下会终止前台作业。
    Ctrl+Z会发送SIGTSTP到前台进程组中的每个进程,默认会挂起前台作业。
  • kill函数发送信号
    可以给其他进程发送信号
  • alarm函数发送信号
    给自己发送SIGALRM信号。
  1. 接受信号
    当内核把进程p从内核模式切换到用户模式,会检查进程p的未被阻塞的待处理信号的集合,如果集合为空,那么内核将控制传递到p的逻辑控制流中的下一条指令。然而,如果是非空的,那么会将集合中的某个信号k强制让p接收。
  2. 阻塞和解除阻塞信号
    隐式阻塞:内核默认阻塞当前程序正在处理信号类型的待处理的信号。
    显示阻塞机制:通过函数明确地阻塞和解除阻塞选定的信号。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 9,616评论 0 23
  • 文/tangsl(简书作者) 原文链接:http://www.jianshu.com/p/2b993a4b913e...
    西葫芦炒胖子阅读 9,196评论 0 5
  • 一、Linux系统概述 不加引号可理解为宏,直接替换,单引号中特殊字符会被解释为普通字符,双引号中$,,'还是特殊...
    赤果_b4a7阅读 5,430评论 0 2
  • 无意中知道了“简书”这个应用,于是就抱着试试看的态度,没想到一下子就被吸引了。感觉好像是一直在寻找的一个朋友...
    若空虚化阅读 2,972评论 0 0
  • 今天分享的内容是专题:16《我有一部会扫描的“雷达——”我能"捡三不落四"》,培养学生注意分配性的积极心理品质。"...
    杨园园1987阅读 1,124评论 0 0