信号
信号机制是UNIX系统最古老的机制之一,它不仅是内核处理程序在运行时发生错误的方式,还是终端管理进程的方式,并且还是一种进程间通信机制。信号机制由三部分构成,首先是信号是怎么产生的,或者说是谁发送的,然后是信号是怎么投递到进程或者线程的,最后是信号是怎么处理的。
可靠信号和不可靠信号
信号一般分为不可靠信号(也称为非实时信号)和可靠信号(也称为实时信号),其主要区别之一就是它们对信号的处理方式:
-
不可靠信号:这些信号不支持信号排队。如果一个进程已经收到了一个不可靠信号但还没有处理它,同时又收到了另一个不可靠信号,那么可能会发生信号丢失的情况。也就是说,第一个信号可能被第二个信号覆盖,导致进程只处理第二个信号。这种信号的编号通常在1到31之间。
-
可靠信号:与不可靠信号不同,可靠信号支持信号排队。这意味着即使进程已经收到了一个可靠信号但还没有处理它,再收到另一个可靠信号时,这两个信号都会被内核排队,进程将依次处理这些信号。这减少了信号丢失的风险。可靠信号的编号通常在32到63之间。
信号排队的机制对于确保进程能够按顺序处理所有接收到的信号非常重要,特别是在多任务和多线程环境中。可靠信号由于支持排队,通常用于需要严格按顺序处理信号的场合,而不可靠信号则可能在某些性能敏感的应用中使用,以避免排队带来的开销。然而,使用不可靠信号时需要考虑到信号丢失的风险,并在程序设计中加以处理。
信号排队
信号的"排队"是指信号在被进程处理之前,先进入一个等待处理的队列。
由于实时信号不会丢失,所以实时信号也叫作可靠信号,由于实时信号是用队列实现的,所以实时信号也叫做排队信号(queue signal)。
原文始发于微信公众号(蟹堡安全团队):信号与信号排队
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论