mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
core: followups for the recent subgroup killing commits
This is a follow-up for0f23564ad4and6b02854f50, as suggested here: https://github.com/systemd/systemd/pull/37855#pullrequestreview-2997596953
This commit is contained in:
committed by
Yu Watanabe
parent
dee77ac201
commit
03b4a607f6
@@ -1339,11 +1339,11 @@ node /org/freedesktop/systemd1 {
|
||||
matching process was found (otherwise it will return successfully, executing no operation).</para>
|
||||
|
||||
<para><function>KillUnitSubgroup()</function> is just like <function>KillUnit()</function> but takes an
|
||||
additional path argument that selects a sub-control-group of the unit's control group. Only processes
|
||||
additional path argument that selects a sub-control group of the unit's control group. Only processes
|
||||
in that subgroup are killed. The path my be specified with our without leading <literal>/</literal>, in
|
||||
both cases it is taken relatively to the unit's control group. If the subgroup path is specified as an
|
||||
empty string or as <literal>/</literal> it has the same effect as <function>KillUnit()</function>. If
|
||||
it is specified as anything else the <literal>who</literal> parameter must be set to either
|
||||
it is specified as anything else the <literal>whom</literal> parameter must be set to either
|
||||
<literal>cgroup</literal> or <literal>cgroup-fail</literal>.</para>
|
||||
|
||||
<para><function>QueueSignalUnit()</function> is similar to <function>KillUnit()</function> but may be
|
||||
|
||||
@@ -826,14 +826,14 @@ static int method_start_unit_replace(sd_bus_message *message, void *userdata, sd
|
||||
}
|
||||
|
||||
static int method_kill_unit(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||
/* We don't bother with GENERIC_UNIT_LOAD nor GENERIC_UNIT_VALIDATE_LOADED here, as it shouldn't
|
||||
* matter whether a unit is loaded for killing any processes possibly in the unit's cgroup. */
|
||||
/* We don't bother with GENERIC_UNIT_LOAD or GENERIC_UNIT_VALIDATE_LOADED here, as it shouldn't
|
||||
* matter whether a unit is loaded for killing any processes in the unit's cgroup. */
|
||||
return method_generic_unit_operation(message, userdata, error, bus_unit_method_kill, 0);
|
||||
}
|
||||
|
||||
static int method_kill_unit_subgroup(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||
/* We don't bother with GENERIC_UNIT_LOAD nor GENERIC_UNIT_VALIDATE_LOADED here, as it shouldn't
|
||||
* matter whether a unit is loaded for killing any processes possibly in the unit's cgroup. */
|
||||
/* We don't bother with GENERIC_UNIT_LOAD or GENERIC_UNIT_VALIDATE_LOADED here, as it shouldn't
|
||||
* matter whether a unit is loaded for killing any processes in the unit's cgroup. */
|
||||
return method_generic_unit_operation(message, userdata, error, bus_unit_method_kill_subgroup, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -4065,10 +4065,12 @@ int unit_kill(
|
||||
|
||||
if (subgroup) {
|
||||
if (!IN_SET(whom, KILL_CGROUP, KILL_CGROUP_FAIL))
|
||||
return sd_bus_error_set(ret_error, SD_BUS_ERROR_NOT_SUPPORTED, "Killing by subgroup is only supported for 'cgroup' or 'cgroup-kill' modes.");
|
||||
return sd_bus_error_set(ret_error, SD_BUS_ERROR_NOT_SUPPORTED,
|
||||
"Killing by subgroup is only supported for 'cgroup' or 'cgroup-kill' modes.");
|
||||
|
||||
if (!unit_cgroup_delegate(u))
|
||||
return sd_bus_error_set(ret_error, SD_BUS_ERROR_NOT_SUPPORTED, "Killing by subgroup is only available for units with control group delegation enabled.");
|
||||
return sd_bus_error_set(ret_error, SD_BUS_ERROR_NOT_SUPPORTED,
|
||||
"Killing by subgroup is only available for units with control group delegation enabled.");
|
||||
}
|
||||
|
||||
main_pid = unit_main_pid(u);
|
||||
|
||||
@@ -260,7 +260,7 @@ static int systemctl_help(void) {
|
||||
" --kill-whom=WHOM Whom to send signal to\n"
|
||||
" --kill-value=INT Signal value to enqueue\n"
|
||||
" --kill-subgroup=PATH\n"
|
||||
" Send signal to sub-control-group only\n"
|
||||
" Send signal to sub-control group only\n"
|
||||
" --what=RESOURCES Which types of resources to remove\n"
|
||||
" --now Start or stop unit after enabling or disabling it\n"
|
||||
" --dry-run Only print what would be done\n"
|
||||
|
||||
@@ -36,4 +36,4 @@ systemctl kill user@"$(id -u testuser)".service --kill-subgroup=app.slice/subgro
|
||||
run0 -u testuser systemctl --user is-active subgroup-test.service
|
||||
systemctl kill user@"$(id -u testuser)".service --kill-subgroup=app.slice/subgroup-test.service --kill-whom=cgroup-fail
|
||||
|
||||
timeout 60 bash -c 'while run0 -u testuser systemctl --user is-active subgroup-test.service ; do sleep 1 ; done'
|
||||
timeout 60 bash -c 'while run0 -u testuser systemctl --user is-active subgroup-test.service; do sleep 1; done'
|
||||
|
||||
Reference in New Issue
Block a user