mirror of
https://github.com/systemd/systemd.git
synced 2024-11-06 16:59:03 +03:00
service: brutally slaughter processes that are running in the cgroup when we enter START_PRE and START
This commit is contained in:
parent
b3fa47e081
commit
8f53a7b8ea
@ -197,6 +197,9 @@ int cgroup_bonding_kill_list(CGroupBonding *first, int sig, bool sigcont, Set *s
|
||||
Set *allocated_set = NULL;
|
||||
int ret = -EAGAIN, r;
|
||||
|
||||
if (!first)
|
||||
return 0;
|
||||
|
||||
if (!s)
|
||||
if (!(s = allocated_set = set_new(trivial_hash_func, trivial_compare_func)))
|
||||
return -ENOMEM;
|
||||
|
@ -2021,6 +2021,11 @@ static void service_enter_start(Service *s) {
|
||||
else
|
||||
service_unwatch_main_pid(s);
|
||||
|
||||
/* We want to ensure that nobody leaks processes from
|
||||
* START_PRE here, so let's go on a killing spree, People
|
||||
* should not spawn long running processes from START_PRE. */
|
||||
cgroup_bonding_kill_list(s->meta.cgroup_bondings, SIGKILL, true, NULL);
|
||||
|
||||
if (s->type == SERVICE_FORKING) {
|
||||
s->control_command_id = SERVICE_EXEC_START;
|
||||
c = s->control_command = s->exec_command[SERVICE_EXEC_START];
|
||||
@ -2090,6 +2095,11 @@ static void service_enter_start_pre(Service *s) {
|
||||
service_unwatch_control_pid(s);
|
||||
|
||||
if ((s->control_command = s->exec_command[SERVICE_EXEC_START_PRE])) {
|
||||
|
||||
/* Before we start anything, let's clear up what might
|
||||
* be left from previous runs. */
|
||||
cgroup_bonding_kill_list(s->meta.cgroup_bondings, SIGKILL, true, NULL);
|
||||
|
||||
s->control_command_id = SERVICE_EXEC_START_PRE;
|
||||
|
||||
if ((r = service_spawn(s,
|
||||
|
Loading…
Reference in New Issue
Block a user