アプリケーションを終了することを意図している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シグナルに何かを接続します。ここでの「問題」は、タイマーの設定が低すぎるとアプリがコアを最大化することですが、設定が高すぎると、タイマーが強制終了されたり、シャットダウンプロセスが著しく遅くなったりする可能性があります。