对打算退出应用程序的 posix 信号的合理反应时间是多少?
换句话说,我的sigint、sigterm或sigtstp处理可能需要多长时间才能在系统关闭、运行级别切换或其他自动化情况下终止应用程序?
我正在编写一个非图形 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 信号以触发应用程序的清理和退出。这里的“问题”是如果我将计时器设置得太低,应用程序会最大化核心,但如果我将其设置得太高,它可能会被杀死或显着减慢关机过程。