From 46e964c5ce20ce4b46b9187376057081eb71bc55 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sat, 30 Jul 2011 18:23:10 +0200 Subject: [PATCH] initctl: support 'telinit u/q' We send SIGTERM (resp., SIGHUP) when we receive request for changing to runlevel 'u' (resp., 'q'). As initctl is already async, we just send the signals rather than first attempting to connect to sytemd over dbus and then falling back to kill. --- src/initctl.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/initctl.c b/src/initctl.c index 7096a824..f36f1cc7 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -165,7 +165,24 @@ static void request_process(Server *s, const struct init_request *req) { if (!isprint(req->runlevel)) log_error("Got invalid runlevel. Ignoring."); else - change_runlevel(s, req->runlevel); + switch (req->runlevel) { + + /* we are async anyway, so just use kill for reexec/reload */ + case 'u': + case 'U': + if (kill(1, SIGTERM) < 0) + log_error("kill() failed: %m"); + break; + + case 'q': + case 'Q': + if (kill(1, SIGHUP) < 0) + log_error("kill() failed: %m"); + break; + + default: + change_runlevel(s, req->runlevel); + } return; case INIT_CMD_POWERFAIL: -- 2.39.5