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.
Signed-off-by: Diego Elio Pettenò <[email protected]> --- bmc-watchdog/src/Makefile.am | 3 ++- bmc-watchdog/src/bmc-watchdog.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bmc-watchdog/src/Makefile.am b/bmc-watchdog/src/Makefile.am index 04c01e2..38d2f7f 100644 --- a/bmc-watchdog/src/Makefile.am +++ b/bmc-watchdog/src/Makefile.am @@ -10,7 +10,8 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/common/src/portability \ -I$(top_srcdir)/libfreeipmi/include \ -D_GNU_SOURCE \ - -D_REENTRANT + -D_REENTRANT \ + -DLOCALSTATEDIR='"$(localstatedir)"' sbin_PROGRAMS = bmc-watchdog diff --git a/bmc-watchdog/src/bmc-watchdog.c b/bmc-watchdog/src/bmc-watchdog.c index 566ee65..403bc0a 100644 --- a/bmc-watchdog/src/bmc-watchdog.c +++ b/bmc-watchdog/src/bmc-watchdog.c @@ -1677,6 +1677,10 @@ _daemon_init () { unsigned int i; pid_t pid; + FILE *pidfile; + + if ( (pidfile = fopen(LOCALSTATEDIR "/run/bmc-watchdog.pid", "w")) == NULL ) + _err_exit ("fopen: %s", strerror (errno)); if ((pid = fork ()) < 0) _err_exit ("fork: %s", strerror (errno)); @@ -1690,8 +1694,13 @@ _daemon_init () 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)); -- 1.7.6.1 _______________________________________________ Freeipmi-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/freeipmi-devel
