From dfd5d6553ecc9ed1d4d79e8259865ba725927863 Mon Sep 17 00:00:00 2001 From: Alex Hornung Date: Sat, 10 Jul 2010 16:13:00 +0100 Subject: [PATCH] udevd - add pidfile & SIGTERM handler * Add the creation of a pidfile and a SIGTERM handler that disposes of the pidfile. * add pidfile to rc script --- etc/rc.d/udevd | 1 + sbin/udevd/udevd.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/etc/rc.d/udevd b/etc/rc.d/udevd index 7fbef5d776..950ad7e11d 100644 --- a/etc/rc.d/udevd +++ b/etc/rc.d/udevd @@ -6,6 +6,7 @@ name="udevd" rcvar=`set_rcvar` +pidfile="/var/run/${name}.pid" command="/sbin/${name}" load_rc_config $name diff --git a/sbin/udevd/udevd.c b/sbin/udevd/udevd.c index 015998e672..d5f69e8d23 100644 --- a/sbin/udevd/udevd.c +++ b/sbin/udevd/udevd.c @@ -287,6 +287,13 @@ out: return pa; } +static void +killed(int sig __unused) +{ + syslog(LOG_ERR, "udevd stopped"); + unlink("/var/run/udevd.pid"); +} + int ignore_signal(int signum) { @@ -301,10 +308,25 @@ ignore_signal(int signum) return ret; } +static int +set_killed_signal(void) +{ + struct sigaction act; + int ret; + + act.sa_handler = killed; + sigemptyset(&act.sa_mask); + act.sa_flags = 0; + + ret = sigaction(SIGTERM, &act, NULL); + return ret; +} + int main(int argc __unused, char *argv[] __unused) { int error __unused, i, r, s; struct pollfd fds[NFDS]; + FILE *pidf; TAILQ_INIT(&pdev_array_list); TAILQ_INIT(&udev_monitor_list); @@ -325,9 +347,18 @@ int main(int argc __unused, char *argv[] __unused) if (s < 0) err(1, "init_local_server"); + pidf = fopen("/var/run/udevd.pid", "w"); + if (pidf == NULL) + err(1, "pidfile"); + + set_killed_signal(); + if (daemon(0, 0) == -1) err(1, "daemon"); + fprintf(pidf, "%ld\n", (long)getpid()); + fclose(pidf); + syslog(LOG_ERR, "udevd started"); pdev_array_entry_insert(udev_getdevs(udevfd)); -- 2.41.0