From: Zbigniew Jędrzejewski-Szmek Date: Sat, 13 Feb 2021 15:03:03 +0000 (+0100) Subject: systemctl,loginctl,machinectl: add --signal=list X-Git-Tag: v248-rc1~127^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=97ab9dfc0d13b142c19335cc53cfd77f96cd2aab;p=thirdparty%2Fsystemd.git systemctl,loginctl,machinectl: add --signal=list This lists numerical signal values: $ systemctl --signal list SIGNAL NAME 1 SIGHUP 2 SIGINT 3 SIGQUIT ... 62 SIGRTMIN+28 63 SIGRTMIN+29 64 SIGRTMIN+30 This is useful when trying to kill e.g. systemd with a specific signal number using kill. kill doesn't accept our fancy signal names like RTMIN+4, so one would have to calculate that value somehow. Doing systemctl --signal list | grep -F RTMIN+4 is a nice way of doing that. --- diff --git a/man/loginctl.xml b/man/loginctl.xml index d3745ce52d6..33683144fa3 100644 --- a/man/loginctl.xml +++ b/man/loginctl.xml @@ -334,13 +334,14 @@ - When used with kill-session - or kill-user, choose which signal to send - to selected processes. Must be one of the well known signal - specifiers, such as SIGTERM, - SIGINT or SIGSTOP. - If omitted, defaults to - SIGTERM. + When used with kill-session or kill-user, + choose which signal to send to selected processes. Must be one of the well known signal specifiers, + such as SIGTERM, SIGINT or SIGSTOP. + If omitted, defaults to SIGTERM. + + The special value help will list the known values and the program will exit + immediately, and the special value list will list known values along with the + numerical signal numbers and the program will exit immediately. diff --git a/man/standard-options.xml b/man/standard-options.xml index 848439119e9..4565a43b244 100644 --- a/man/standard-options.xml +++ b/man/standard-options.xml @@ -73,7 +73,8 @@ . The special value help will list the known values and the program will exit - immediately. + immediately, and the special value list will list known values along with the + numerical signal numbers and the program will exit immediately. diff --git a/src/shared/parse-argument.c b/src/shared/parse-argument.c index a30d3adc13f..ca10d51793b 100644 --- a/src/shared/parse-argument.c +++ b/src/shared/parse-argument.c @@ -1,7 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include "format-table.h" #include "parse-argument.h" #include "signal-util.h" +#include "stdio-util.h" #include "string-table.h" #include "string-util.h" @@ -16,6 +18,29 @@ int parse_signal_argument(const char *s, int *ret) { return 0; } + if (streq(s, "list")) { + _cleanup_(table_unrefp) Table *table = NULL; + + table = table_new("signal", "name"); + if (!table) + return log_oom(); + + for (int i = 1; i < _NSIG; i++) { + r = table_add_many( + table, + TABLE_INT, i, + TABLE_SIGNAL, i); + if (r < 0) + return table_log_add_error(r); + } + + r = table_print(table, NULL); + if (r < 0) + return table_log_print_error(r); + + return 0; + } + r = signal_from_string(s); if (r < 0) return log_error_errno(r, "Failed to parse signal string \"%s\".", s);