From: Christian Hesse Date: Wed, 28 Mar 2018 19:58:10 +0000 (+0200) Subject: systemd-inhibit: ignore signal interrupt from keyboard (#8569) X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=68c47871535923b5580c5e58105f97a062b363dd;p=elogind.git systemd-inhibit: ignore signal interrupt from keyboard (#8569) 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) --- diff --git a/src/login/inhibit.c b/src/login/inhibit.c index 1ef98daa2..9944a5e76 100644 --- a/src/login/inhibit.c +++ b/src/login/inhibit.c @@ -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, " ");