source: MondoRescue/branches/2.2.5/mindi-busybox/miscutils/watchdog.c @ 1765

Last change on this file since 1765 was 1765, checked in by Bruno Cornec, 13 years ago

Update to busybox 1.7.2

File size: 1.4 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Mini watchdog implementation for busybox
4 *
5 * Copyright (C) 2003  Paul Mundt <lethal@linux-sh.org>
6 * Copyright (C) 2006  Bernhard Fischer <busybox@busybox.net>
7 *
8 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
9 */
10
11#include "libbb.h"
12
13#define OPT_FOREGROUND 0x01
14#define OPT_TIMER      0x02
15
16static void watchdog_shutdown(int ATTRIBUTE_UNUSED sig) ATTRIBUTE_NORETURN;
17static void watchdog_shutdown(int ATTRIBUTE_UNUSED sig)
18{
19    write(3, "V", 1);   /* Magic, see watchdog-api.txt in kernel */
20    if (ENABLE_FEATURE_CLEAN_UP)
21        close(3);
22    exit(0);
23}
24
25int watchdog_main(int argc, char **argv);
26int watchdog_main(int argc, char **argv)
27{
28    unsigned opts;
29    unsigned timer_duration = 30; /* Userspace timer duration, in seconds */
30    char *t_arg;
31
32    opt_complementary = "=1"; /* must have 1 argument */
33    opts = getopt32(argv, "Ft:", &t_arg);
34
35    if (opts & OPT_TIMER)
36        timer_duration = xatou(t_arg);
37
38    if (!(opts & OPT_FOREGROUND)) {
39        bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
40    }
41
42    signal(SIGHUP, watchdog_shutdown);
43    signal(SIGINT, watchdog_shutdown);
44
45    /* Use known fd # - avoid needing global 'int fd' */
46    xmove_fd(xopen(argv[argc - 1], O_WRONLY), 3);
47
48    while (1) {
49        /*
50         * Make sure we clear the counter before sleeping, as the counter value
51         * is undefined at this point -- PFM
52         */
53        write(3, "", 1);
54        sleep(timer_duration);
55    }
56
57    watchdog_shutdown(0);
58    /* return EXIT_SUCCESS; */
59}
Note: See TracBrowser for help on using the repository browser.