c – 如果在UNIX中的信号处理过程中会发送相同的信号到程序中会发生什么?

前端之家收集整理的这篇文章主要介绍了c – 如果在UNIX中的信号处理过程中会发送相同的信号到程序中会发生什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有什么想法吗?是否有某种信号队列,还是丢弃?

虽然我们在这个问题上,信号处理程序是否应该尽可能地尽量减少工作?

我读到一个信号处理程序应该使用一个管道,只写一个字节,指示程序应该做什么.然后,其他地方程序会定期检查管道,并根据其中的字节进行调度. (我可能误会了)

谢谢Boda Cydo.

解决方法

为了回答你的问题的第二部分,“信号处理程序是否应尽可能地尽可能少地工作?”答案是肯定的,因为有一个非常小的功能集是“异步信号安全”,因此能够从信号处理程序调用.异步信号安全是一种增强形式的重入.如果foo()是异步信号安全的,这意味着在信号处理程序中调用foo()是安全的,即使当信号被提升时,foo()已经执行了.

您可以通过查看第7节手册页面的信号(man 7信号)来获取异步信号安全功能的完整列表.直接或间接地从信号处理程序内调用这些函数之外的任何函数调用未定义的行为.

“写一个字节到管道”方法是处理信号而不受限于异步信号安全功能的好方法,特别是如果您的程序已经围绕选择循环定向.

原文链接:https://www.f2er.com/c/113314.html

猜你在找的C&C++相关文章