信号
一个信号就是一小条消息,它通知进程系统中发生了一个某种类型的事件
Linux支持的30种不同的类型信号如下:
信号.png
传送一个信号到目的地的进程是由两个不同的步骤组成的:
-
发送信号: 内核通过更新目的进程上下文中的某个状态,发送一个信号给目的进程,可以有两种原因:
- 内核检测到了一个系统事件
- 一个进程调用了
kill函数
Unix系统提供了大量向进程发送信号的机制。所有这些机制都是基于
进程组
这个概念的 接收信号: 当目的进程被内核强迫以某种方式对信号的发送作出响应时,它就接收了信号。进程可以忽略这个信号,终止或通过执行一个称为
信号处理程序
的用户层函数来捕获这个信号
Linux提供阻塞信号的隐式和显式两种机制:
- 隐式阻塞机制: 内核默认阻塞任何当前处理程序正在处理信号类型的待处理的信号
-
显式阻塞机制: 应用程序可以使用
sigprocmask
函数和它的辅助函数来明确阻塞和解除阻塞选定的信号
非本地跳转
C语言提供了一种用户级异常控制流形式,它将控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用-返回
序列,称作非本地跳转
Linux进程工具
- STRACE: 打印一个正在运行的程序和它的子进程调用的每个系统调用的轨迹
- PS: 列出当前系统中的进程(包括僵死进程)
- TOP: 打印出关于当前进程资源使用的信息
- PMAP: 显示进程的内存映射