From 9a88f7da453eadc72d8f333700dbd80777feecd1 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sun, 25 Feb 2018 14:33:19 +0100 Subject: Initial commit Signed-off-by: David Oberhollenzer --- initd/shutdown.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 initd/shutdown.c (limited to 'initd/shutdown.c') diff --git a/initd/shutdown.c b/initd/shutdown.c new file mode 100644 index 0000000..45af1c2 --- /dev/null +++ b/initd/shutdown.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "init.h" + +void do_shutdown(int type) +{ + struct timespec req, rem; + + print_status("sending SIGTERM to all processes", STATUS_WAIT, false); + kill(-1, SIGTERM); + + memset(&req, 0, sizeof(req)); + memset(&rem, 0, sizeof(rem)); + req.tv_sec = 5; /* TODO: make configurable? */ + + while (nanosleep(&req, &rem) != 0 && errno == EINTR) + req = rem; + + print_status("sending SIGTERM to all processes", STATUS_OK, true); + kill(-1, SIGKILL); + print_status("sending SIGKILL to remaining processes", + STATUS_OK, false); + + print_status("sync", STATUS_WAIT, false); + sync(); + print_status("sync", STATUS_OK, true); + + reboot(type); + perror("reboot system call"); + exit(EXIT_FAILURE); +} -- cgit v1.2.3