diff options
author | Christian Hesse <mail@eworm.de> | 2018-03-28 21:58:10 +0200 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2018-06-28 09:24:07 +0200 |
commit | 68c47871535923b5580c5e58105f97a062b363dd (patch) | |
tree | 6633402599a74abad6180392c19666a16da76165 /src | |
parent | 504cb982f882169fc0adf9a2151a4331d339056d (diff) |
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)
Diffstat (limited to 'src')
-rw-r--r-- | src/login/inhibit.c | 3 |
1 files changed, 3 insertions, 0 deletions
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, " "); |