freeipmi-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Freeipmi-devel] [PATCH] bmc-watchdog: write pidfile with the daemon's P


From: Diego Elio Pettenò
Subject: [Freeipmi-devel] [PATCH] bmc-watchdog: write pidfile with the daemon's PID
Date: Wed, 7 Sep 2011 08:20:03 +0200

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ò <address@hidden>
---
 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]