讯号是很短的消息,可以被发送到一个进程或一组进程。发送给进程的惟一讯号一般是一个数。
使用讯号的两个主要的目的是:
让进程晓得已然发生了一个特定的风波。
逼迫进程执行它自己代码中的讯号处理程序。
讯号的一个重要特征是它们可以随时被发送给状态常常不可预知的进程。发送给非运行进程的信息号必须由内核保护,直至进程恢复执行。阻塞一个讯号要求讯号的传递拖延,直至随即解除阻塞,这促使讯号形成一段时间过后能够对其传递这一问题显得愈发严重。
为此,内核分辨信息传递的两个不同阶段:
讯号形成
内核更新目标进程的数据结表示一个新讯号已被发送。
讯号传递
内核逼迫目标进程通过以下方法对讯号做出反应:或改变目标进程的执行状态,或开始执行一个特定的讯号处理程序,或二者都是。
每位所形成的讯号至多被传递一次。讯号是可以消费资源:一旦它们已传递出去,进程描述符中有关这个讯号的所有信息都被取消。
早已形成但还没有传递的信堪称为挂起讯号(pendingsingal)。任何时侯,一个进程仅存在给定类型的一个挂起讯号,同一进程同种类型的其他信息不被排队linux内核信号量,只被简单地扔掉。并且,实时讯号是不同的:同种类型的挂起讯号可以有好几个。
进程描述符的signal数组指向讯号描述符(signaldescriptor)--一个single_struct类型的结构linux内核信号量,拿来跟踪共享挂起讯号。
不仅讯号描述符以外,每位进程还引用一个讯号处理程序描述符(signadhandlerdescriplor),它是一个sighand_strust类型的结构,拿来描述每位讯号必须如何被线程组处理。
好多内核函数就会形成讯号:它们完成讯号处理第一步的工作,即按照须要更新一个或多个进程的描述符。它们不直接执行第二步的讯号民传递操作linux怎么读,而是可能按照讯号的类型和目标进程的状态唤起一些进程查看linux是什么系统,并使得这种进程接收讯号。
本文原创地址://lrxjmw.cn/xhcdnhqpmbjc.html编辑:刘遄,审核员:暂无