第八章《异常》(二)

信号

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

Linux支持的30种不同的类型信号如下:

信号.png

传送一个信号到目的地的进程是由两个不同的步骤组成的:

  • 发送信号: 内核通过更新目的进程上下文中的某个状态,发送一个信号给目的进程,可以有两种原因:

    • 内核检测到了一个系统事件
    • 一个进程调用了kill函数

    Unix系统提供了大量向进程发送信号的机制。所有这些机制都是基于进程组这个概念的

  • 接收信号: 当目的进程被内核强迫以某种方式对信号的发送作出响应时,它就接收了信号。进程可以忽略这个信号,终止或通过执行一个称为信号处理程序的用户层函数来捕获这个信号

Linux提供阻塞信号的隐式和显式两种机制:

  • 隐式阻塞机制: 内核默认阻塞任何当前处理程序正在处理信号类型的待处理的信号
  • 显式阻塞机制: 应用程序可以使用sigprocmask函数和它的辅助函数来明确阻塞和解除阻塞选定的信号

非本地跳转

C语言提供了一种用户级异常控制流形式,它将控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用-返回序列,称作非本地跳转

Linux进程工具

  • STRACE: 打印一个正在运行的程序和它的子进程调用的每个系统调用的轨迹
  • PS: 列出当前系统中的进程(包括僵死进程)
  • TOP: 打印出关于当前进程资源使用的信息
  • PMAP: 显示进程的内存映射
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容