Index: ChangeLog =================================================================== --- ChangeLog (revision 7815) +++ ChangeLog (working copy) @@ -1,3 +1,10 @@ +2011-09-07 Diego Elio Pettenò + + * bmc-watchdog/src/bmc-watchdog.c: By writing a pidfile, init + scripts can rely on that to kill or signal the running daemon + instance. This is important because relying on the process name + can be troublesome when using Linux Containers, for instance. + 2011-09-06 Diego Elio Pettenò * libfreeipmi/src/Makefile.am: The -module option is used to tell Index: bmc-watchdog/src/bmc-watchdog.c =================================================================== --- bmc-watchdog/src/bmc-watchdog.c (revision 7806) +++ bmc-watchdog/src/bmc-watchdog.c (working copy) @@ -98,6 +98,8 @@ *(__val) = __temp; \ } while (0) +#define BMC_WATCHDOG_PIDFILE BMC_WATCHDOG_LOCALSTATEDIR "/run/bmc-watchdog.pid" + struct bmc_watchdog_arguments cmd_args; /* program name */ @@ -1677,7 +1679,11 @@ { unsigned int i; pid_t pid; + FILE *pidfile; + if ( (pidfile = fopen(BMC_WATCHDOG_PIDFILE, "w")) == NULL ) + _err_exit ("fopen: %s", strerror (errno)); + if ((pid = fork ()) < 0) _err_exit ("fork: %s", strerror (errno)); if (pid) @@ -1690,8 +1696,13 @@ if ((pid = fork ()) < 0) _err_exit ("fork: %s", strerror (errno)); - if (pid) + if (pid) { + /* write the 2nd child PID to the pidfile */ + fprintf(pidfile, "%u\n", pid); + fclose(pidfile); + exit (0); /* 1st child terminates */ + } if (chdir ("/") < 0) _err_exit ("chdir: %s", strerror (errno)); Index: bmc-watchdog/src/Makefile.am =================================================================== --- bmc-watchdog/src/Makefile.am (revision 7806) +++ bmc-watchdog/src/Makefile.am (working copy) @@ -10,7 +10,8 @@ -I$(top_srcdir)/common/src/portability \ -I$(top_srcdir)/libfreeipmi/include \ -D_GNU_SOURCE \ - -D_REENTRANT + -D_REENTRANT \ + -DBMC_WATCHDOG_LOCALSTATEDIR='"$(localstatedir)"' sbin_PROGRAMS = bmc-watchdog