1
0
mirror of https://github.com/systemd/systemd synced 2024-07-09 12:36:12 +00:00

core: rework how logging level is calculated for kill operations

Setting the log level based on the signal made sense when signals that
were used were fixed. Since we allow signals to be configured, it doesn't
make sense to log at notice level about e.g. a restart or stop operation
just because the signal used is different.

This avoids messages like:
  six.service: Killing process 210356 (sleep) with signal SIGINT.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2019-10-01 15:53:42 +02:00
parent b557f1c147
commit 4ab1670f3d

View File

@ -4686,22 +4686,26 @@ static int log_kill(pid_t pid, int sig, void *userdata) {
return 1;
}
static int operation_to_signal(KillContext *c, KillOperation k) {
static int operation_to_signal(const KillContext *c, KillOperation k, bool *noteworthy) {
assert(c);
switch (k) {
case KILL_TERMINATE:
case KILL_TERMINATE_AND_LOG:
*noteworthy = false;
return c->kill_signal;
case KILL_RESTART:
*noteworthy = false;
return restart_kill_signal(c);
case KILL_KILL:
*noteworthy = true;
return c->final_kill_signal;
case KILL_WATCHDOG:
*noteworthy = true;
return c->watchdog_signal;
default:
@ -4730,16 +4734,16 @@ int unit_kill_context(
if (c->kill_mode == KILL_NONE)
return 0;
sig = operation_to_signal(c, k);
bool noteworthy;
sig = operation_to_signal(c, k, &noteworthy);
if (noteworthy)
log_func = log_kill;
send_sighup =
c->send_sighup &&
IN_SET(k, KILL_TERMINATE, KILL_TERMINATE_AND_LOG) &&
sig != SIGHUP;
if (k != KILL_TERMINATE || IN_SET(sig, SIGKILL, SIGABRT))
log_func = log_kill;
if (main_pid > 0) {
if (log_func)
log_func(main_pid, sig, u);