C で記述したアプリケーションを Linux デバイス サーバーで実行しています。アプリケーションがクラッシュまたはハングした場合、システムを再起動したいと考えています。デバイス サーバーには、この機能を実装していると思われるサンプル アプリが付属していましたが、よくわかりません。この機能を実装していると思われるものを取り出して、次のスケルトンを作成しました。
int terminate=0;
int main () {
struct sigaction sigact;
sigact.sa_handler = sighandler;
sigemptyset(&sigact.sa_mask);
sigact.sa_flags = 0;
sigaction(SIGTERM,&sigact,0);
while (terminate == 0)
{
// my main application functions
}
SDK_reboot(); // reboots my device server
}
void sighandler(int sig)
{
if (sig == SIGTERM)
terminate = 1;
}
基本的に、上記のコードで何が起こっているのかを理解し、必要に応じてコードを変更して、ニーズを満たすようにしたいと考えています。Is 'sigaction(SIGTERM,&sigact,0);' アプリケーションのハングまたはクラッシュに応答して SIGTERM が発生する原因となる行は? いいえの場合、正しいコードは何ですか? また、一般的に、上記はアプリケーションのクラッシュ/ハング時に再起動を実装する良い方法ですか? それとも私は軌道から外れていますか?よろしくお願いします。