当前位置: 首页 > 面试题库 >

C中的信号排队

卓新知
2023-03-14
问题内容

我在Linux下有一个简单的程序,该程序可以周期性地将SIGUSR1信号发送到其子进程。但是当我发送例如10个信号时,有时会发生,孩子只接收了3个信号。最后发送的信号始终是SIGUSR2,并且每次都会接收到。

信号是否在排队,或者当进程未处理前一个信号时,信号就会被覆盖?有什么方法可以在队列中发送信号吗?


问题答案:

发生了以下情况:

  1. 收到的第一个信号,即SIGUSR1,处理程序被调用并正在运行
  2. 接收到第二个信号,因为来自nr1的处理程序仍在运行,所以信号nr2处于挂起状态并被阻止。
  3. 收到第三个信号,由于来自nr1的处理程序仍在运行,因此信号3被丢弃。
  4. 丢弃与信号nr1相同类型的第四,第五等信号。

使用信号nr1完成信号处理程序后,它将处理信号nr2,然后信号处理程序将处理SIGUSR2。

基本上,相同类型的未决信号不会排队,而是会被丢弃。不,没有简单的方法可以“爆发”这种方式发送信号。人们总是假设可能会丢弃多个信号,并试图让处理程序执行清理工作并找出要做什么(例如收养孩子,如果所有孩子同时死亡)。



 类似资料:
  • 信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。 有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 <csignal> 中。 信号 描述 SIGABRT 程序的异常终止,如调用 abort。 SIGFPE 错误的算术

  • 来自C++20的的行为是否类似于互斥/原子操作?即是获取操作(关于内存排序)吗,是释放操作吗?

  • 信号量是学习同步的一个好方式,但是它们实际上并没有像互斥体和条件变量一样被广泛使用。 尽管如此,还是有一些同步问题可以用信号量简单解决,产生显然更加合适的解决方案。 这一章展示了C语言用于处理信号量的API,以及我用于使它更加容易使用的代码。而且它展示了一个终极挑战:你能不能使用互斥体和条件变量来实现一个信号量? 这一章的代码在本书仓库的semaphore目录中。 11.1 POSIX信号量 信号

  • 本文向大家介绍C++ 线程安全信号,包括了C++ 线程安全信号的使用技巧和注意事项,需要的朋友参考一下 示例 C ++ 11 C ++ 11标准保证以同步方式初始化函数作用域对象的初始化。这可以用于通过延迟初始化实现线程安全的单例。

  • #深信服# 流程很快,前天晚上做完笔试昨天就收到预约,今天上午11.30一面,全程40多min 自我介绍 自我介绍里面提到了毕设,做的yolov5的目标检测,问我里面有没有自己的东西,但是AI什么现状懂得都懂。 malloc最多能申请多少内存,和面试官拉扯了很久。 一个生产者,一个消费者,用循环队列做缓冲区,需要用锁实现同步吗?(感觉有玄机,回答不需要,但是为什么答不上来,面完问了问别人才知道还有

  • 问题内容: 我需要在C / C ++ linux中每’n’毫秒激活一次的函数(例如,信号处理程序)。如何设置信号等,以便以毫秒分辨率注册计时器事件。 精度并非至关重要,但需要在数百毫秒左右的时间内。 我是Linux新手,我真的不知道从哪里开始。 问题答案: 是一个好的开始,但是您真的要与信号异步吗?否则,您可能会有一个带有或以及适当超时的主循环。