--- src/collectd.c 2005-10-23 15:12:15.000000000 +0300 +++ src/collectd.c 2005-10-23 15:11:37.000000000 +0300 @@ -16,6 +16,8 @@ int num_pinghosts = 0; #endif +#define PID_PATH "/var/run/collectd.pid" + /* * exported variables */ @@ -133,7 +135,8 @@ return (-1); } #endif - + if (create_pidfile ()) + exit (2); plugin_init_all (); while (loop == 0) @@ -163,6 +166,9 @@ char *instance; char *values; + if (create_pidfile ()) + exit (2); + while (loop == 0) { if (multicast_receive (&host, &type, &instance, &values) == 0) @@ -177,6 +183,24 @@ return (0); } +int create_pidfile (void) +{ + FILE *fh = fopen (PID_PATH, "w"); + if (!fh) + { + syslog (LOG_ERR, "fopen (pidfile): %s", strerror (errno)); + return 1; + } + fprintf(fh, "%d\n", getpid()); + fclose(fh); + return 0; +} + +int remove_pidfile (void) +{ + return unlink (PID_PATH); +} + int main (int argc, char **argv) { struct sigaction sigIntAction, sigChldAction; @@ -324,6 +348,7 @@ */ syslog (LOG_INFO, "Exiting normally"); closelog (); + remove_pidfile(); return (0); }