[systemd-commits] src/initctl.c

Lennart Poettering lennart at kemper.freedesktop.org
Mon Aug 1 14:23:01 PDT 2011


 src/initctl.c |   19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

New commits:
commit 46e964c5ce20ce4b46b9187376057081eb71bc55
Author: Tom Gundersen <teg at jklm.no>
Date:   Sat Jul 30 18:23:10 2011 +0200

    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.

diff --git a/src/initctl.c b/src/initctl.c
index 7096a82..f36f1cc 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:



More information about the systemd-commits mailing list