微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

posix信号反应时间

将意图退出申请的信号置于合理的反应时间是什么?

换句话说,在系统在关机,运行级别切换或其他自动化情况下杀死应用程序之前, sigint , sigterm或sigtstp处理可能需要多长时间?

我正在写一个非graphics化的qt应用程序,它必须响应信号才能在终止之前进行清理。 这是我目前的实现:

#include "posixsignals.h" #include <signal.h> QAtomicInt posixSignals::sig(0); posixSignals::posixSignals() { //connect to posix signals signal(SIGINT,posixSignals::interrupt); signal(SIGTSTP,posixSignals::interrupt); signal(SIGTERM,posixSignals::interrupt); //connect and start QTimer t connect(&t,SIGNAL(timeout()),this,SLOT(check())); t.start(500); } void posixSignals::interrupt(int signal) { sig.testAndSetordered(0,signal); } void posixSignals::check() { if(sig) emit signalCought(sig); }

在实际的实现中,我将一些东西连接到signalCought信号,以触发应用程序的清理和退出。 这里的“问题”是如果我设置的定时器太低的应用程序最大的核心,但如果我把它设置得太高,它可能会被杀死或减缓关机过程明显。

Linux中POSIX可靠信号和POSIX实时信号有什么区别?

为什么subprocess在接收到信号后继续运行?

在这个信号处理程序中会发生什么?

GDB不立即中断程序

我们可以重置sigsetjmp再次返回“0”(Reset sigsetjmp)吗?

什么是sigaddset用于?

setitimer,SIgalRM和multithreading进程(linux,c)

即使在Cygwin上,Python信号也不起作用?

Python,sigaction(2)可用?

在multithreading环境中阻止完整进程的信号

当使用init(8) ,正在使用/etc/init.d/中的脚本来停止进程。 我相信确切的机制和时间限制可能会因分配而有所不同。 在我的情况下,时间设置为3秒(你可以在killproc()函数内的/etc/rc.d/init.d/functions文件中找到它,所以3秒是一般的上限。

这个参数也可以被任何特定守护进程/应用程序的启动/停止脚本覆盖。 也有替代init.d , systemd的例子。 但我不确定这个系统是如何工作的,所以不能告诉超时。

我认为3秒钟足以阻止任何应用程序 – 很难想象可能需要更长的时间。 在最糟糕的情况下 – 只是维护一些日志,看看你的应用程序是否按时发布。

希望能帮助到你。

如下所述,您可以使用带有QSocketNotifier的套接字将posix信号转换为Qt事件,而不是轮询循环。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐