信号排队在C

信号排队在C,第1张

概述我在 Linux下有一个简单的程序,它会在一个周期内向其子进程发送SIGUSR1信号.但是当我发送例如有时发生10个信号,孩子只收到其中3个信号.最后发送的信号始终为SIGUSR2,每次都接收到. 信号是否排队,或者当进程没有处理之前,它被简单地覆盖?有没有办法我可以在队列中发送信号? 会发生什么事情如下: >接收到第一个信号,即SIGUSR1,处理程序被调用并正在运行 >接收到第二个信号,由于来 我在 Linux下有一个简单的程序,它会在一个周期内向其子进程发送SIGUSR1信号.但是当我发送例如有时发生10个信号,孩子只收到其中3个信号.最后发送的信号始终为SIGUSR2,每次都接收到.

信号是否排队,或者当进程没有处理之前,它被简单地覆盖?有没有办法我可以在队列中发送信号?

解决方法 会发生什么事情如下:

>接收到第一个信号,即SIGUSR1,处理程序被调用并正在运行
>接收到第二个信号,由于来自nr1的处理程序仍在运行,信号nr2将被挂起并被阻止.
>接收到第三个信号,信号3被丢弃.
与信号nr1相同类型的第四,第五…等信号被丢弃.

一旦信号处理程序用信号nr1完成,它将处理信号nr2,然后信号处理程序将处理SIGUSR2.

基本上,相同类型的待处理信号不排队,而是丢弃.而不是,没有简单的方式“突发”发送信号.人们总是假定可以丢弃几个信号,并试图让处理者做清洁工作,并找出要做的事情(比如收获孩子,如果所有孩子同时死亡).

总结

以上是内存溢出为你收集整理的信号排队在C全部内容,希望文章能够帮你解决信号排队在C所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存