3.5 watchdog.c:计时器

来源:互联网 发布:淘宝的优势和劣势 编辑:程序博客网 时间:2024/05/16 15:21

该程序实现posfix中的计时器,使用alarm系统调用计时。计时器的主要功能是支持daemon_timeout参数,但master等进程不受该参数限制。

 

postfix用daemon_timeout参数限定守护进程生存时间,默认18000秒。在执行模板(singer_server.c,multi_server.c,见4.4节)中,使用watchdog来让该参数生效:

watchdog =watchdog_create(var_daemon_timeout, (WATCHDOG_FN) 0, (void *) 0);

在qmgr模块中,daemon_timeout参数也可以使用event_request_timer函数(见3.7.5)安排一个qmgr_transport_abort时间事件来实现。

/util/watchdog.c/*  * UNIX alarms are not stackable, but we can save and restore state, so that  * watchdogs can at least be nested, sort of.  */struct WATCHDOG {    unsigned timeout;/* our time resolution */    WATCHDOG_FN action;/* application routine */    char   *context;/* application context */    int     trip_run;/* number of successive timeouts */    WATCHDOG *saved_watchdog;/* saved state */    struct sigaction saved_action;/* saved state */unsigned saved_time;/* saved state */};


timeout为超时值,action为回调函数。

 

发生超时时,执行回调函数或杀死进程:

if (wp->action)    wp->action(wp, wp->context);else {    killme_after(5);


在watchdog_start函数中开启alarm(wp->timeout)(实际上alarm不会以timeout时间参数来触发而会以timeout/WATCHDOG_STEPS的节奏来触发,WATCHDOG_STEPS默认值为3)


0 0