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, 16 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.