chiark / gitweb /
systemd-inhibit: ignore signal interrupt from keyboard (#8569)
authorChristian Hesse <mail@eworm.de>
Wed, 28 Mar 2018 19:58:10 +0000 (21:58 +0200)
committerSven Eden <yamakuzure@gmx.net>
Thu, 28 Jun 2018 07:24:07 +0000 (09:24 +0200)
By default both processes, systemd-inhibit and the forked one, receive
the signals. Pressing Ctrl+C on the keyboard results in SIGINT being
sent to the processes, followed by SIGTERM being sent to the forked
process when systemd-inhibit exits. This can cause trouble when the
forked process does not clean up properly but exit immediately.

Instead make systemd-inhibit ignore SIGINT, leaving it to the forked
process to clean up and exit.

(cherry picked from commit 106f12a08fcacef713438fc055872592399deeed)

src/login/inhibit.c

index 1ef98daa22a5b2f5e77cdb3b303ed70bf6f5e447..9944a5e7602e12ce4b6435921331096e239dbfd5 100644 (file)
@@ -258,6 +258,9 @@ int main(int argc, char *argv[]) {
                 _cleanup_free_ char *w = NULL;
                 pid_t pid;
 
+                /* Ignore SIGINT and allow the forked process to receive it */
+                (void) ignore_signals(SIGINT, -1);
+
                 if (!arg_who)
                         arg_who = w = strv_join(argv + optind, " ");