Solaris 系统信号机制深度解析
1. 信号基础概念
信号是一种用于向进程或线程通知特定事件的机制。它常被类比为硬件中断,例如磁盘 I/O 接口完成 I/O 操作后向处理器发出中断,处理器会进入中断处理程序进行后续处理。信号的工作方式与之类似,当信号发送到进程或线程时,可能会进入信号处理程序(取决于信号的当前处置方式)。
早期的信号实现被认为不可靠。在过去,若进程捕获到信号并调用自己的处理程序,内核可能会在进程处理程序被调用之前将信号处理程序重置为默认值。即使尝试在信号处理程序中重新安装自身,由于信号的连续发生可能导致竞态条件,问题仍无法完全解决。不过,在 20 世纪 80 年代中期,4.3BSD Unix 和 SVR3 解决了这个问题,实现了可靠的信号机制,即安装的信号处理程序会保持持久,不会被内核重置。如今,Solaris 的信号实现完全符合 POSIX 标准,可靠的信号需要使用较新的 sigaction(2) 接口,而传统的 signal(3C) 调用无法保证处理程序的持久性。
信号的发生可分为同步和异步两种类型,具体取决于信号的来源和根本原因:
- 同步信号 :是执行指令流的直接结果,通常由不可恢复的错误(如非法指令或非法地址引用)引发,需要立即终止进程。这类信号会直接发送给导致错误的线程,由于这种错误会触发内核陷阱处理程序,所以同步信号有时也被称为陷阱。
- 异步信号 :与当前执行上下文外部相关(在某些情况下无关)。例如,一个进程或线程可以通过 kill(2) 、 _l
超级会员免费看
订阅专栏 解锁全文
2

被折叠的 条评论
为什么被折叠?



