diff --git a/include/usage.h b/include/usage.h index 712eede63..4aed1664d 100644 --- a/include/usage.h +++ b/include/usage.h @@ -3372,11 +3372,12 @@ USE_FEATURE_START_STOP_DAEMON_FANCY( \ "Mon Dec 17 10:31:44 GMT 2000" #define watchdog_trivial_usage \ - "[-t ] DEV" + "[-t ] [-F] DEV" #define watchdog_full_usage \ "Periodically write to watchdog device DEV.\n" \ "Options:\n" \ - "\t-t\tTimer period in seconds - default is 30" + "\t-t\tTimer period in seconds - default is 30\n" \ + "\t-F\tStay in the foreground and don't fork" #define wc_trivial_usage \ "[OPTION]... [FILE]..." diff --git a/miscutils/watchdog.c b/miscutils/watchdog.c index e8275e68e..ddd349d9b 100644 --- a/miscutils/watchdog.c +++ b/miscutils/watchdog.c @@ -15,6 +15,9 @@ #include #include +#define OPT_FOREGROUND 0x01 +#define OPT_TIMER 0x02 + /* Watchdog file descriptor */ static int fd; @@ -27,10 +30,13 @@ static void watchdog_shutdown(int ATTRIBUTE_UNUSED unused) int watchdog_main(int argc, char **argv) { + unsigned long opts; unsigned long timer_duration = 30; /* Userspace timer duration, in seconds */ char *t_arg; - if (bb_getopt_ulflags(argc, argv, "t:", &t_arg)) + opts = bb_getopt_ulflags(argc, argv, "Ft:", &t_arg); + + if (opts & OPT_TIMER) timer_duration = bb_xgetlarg(t_arg, 10, 0, INT_MAX); /* We're only interested in the watchdog device .. */ @@ -38,7 +44,8 @@ int watchdog_main(int argc, char **argv) bb_show_usage(); #ifdef BB_NOMMU - vfork_daemon(0, 1); + if (!(opts & OPT_FOREGROUND)) + vfork_daemon_rexec(0, 1, argc, argv, "-F"); #else bb_xdaemon(0, 1); #endif