Sdílet prostřednictvím


Použití systémového časovače jako sledovacího zařízení

Aplikace vysoké úrovně může jako sledovací pes použít systémový časovač, který způsobí ukončení operačního systému a restartování aplikace, pokud přestane reagovat. Když vyprší platnost sledovacího zařízení, vyvolá signál, že aplikace nezpracuje, což následně způsobí ukončení aplikace operačním systémem. Po ukončení operační systém automaticky restartuje aplikaci.

Použití časovače sledovacího zařízení:

  • Definování časovače
  • Vytvoření a spuštění časovače
  • Pravidelné resetování časovače před vypršením jeho platnosti

Pokud chcete definovat časovač, vytvořte strukturu itimerspec a nastavte interval a počáteční vypršení platnosti na pevnou hodnotu, například jednu sekundu.

#include <time.h>

const struct itimerspec watchdogInterval = { { 1, 0 },{ 1, 0 } };
timer_t watchdogTimer;

Nastavte událost oznámení, signál a hodnotu signálu pro sledovacího psa, zavolejte timer_create , abyste ho vytvořili, a zavolejte timer_settime , které ho zavolají. V tomto příkladu watchdogTimer vyvolá událost SIGALRM. Aplikace nezpracovává událost, takže operační systém aplikaci ukončí.

void SetupWatchdog(void)
{
    struct sigevent alarmEvent;
    alarmEvent.sigev_notify = SIGEV_SIGNAL;
    alarmEvent.sigev_signo = SIGALRM;
    alarmEvent.sigev_value.sival_ptr = &watchdogTimer;

    int result = timer_create(CLOCK_MONOTONIC, &alarmEvent, &watchdogTimer);
    result = timer_settime(watchdogTimer, 0, &watchdogInterval, NULL);
}

Jinde v kódu aplikace pravidelně resetujte sledovacího zařízení. Jednou z technik je použití druhého časovače, který má období kratší než watchdogInterval, k ověření, že aplikace funguje podle očekávání, a pokud ano, resetovat časovač sledovacího zařízení.

// Must be called periodically
void ExtendWatchdogExpiry(void)
{
    //check that application is operating normally
    //if so, reset the watchdog
    timer_settime(watchdogTimer, 0, &watchdogInterval, NULL);
}