service: place control command in subcgroup control/

Previously, we were brutally and onconditionally killing all processes
in a service's cgroup before starting the service anew, in order to
ensure that StartPre lines cannot be misused to spawn long-running
processes.

On logind-less systems this has the effect that restarting sshd
necessarily calls all active ssh sessions, which is usually not
desirable.

With this patch control processes for a service are placed in a
sub-cgroup called "control/". When starting a service anew we simply
kill this cgroup, but not the main cgroup, in order to avoid killing any
long-running non-control processes from previous runs.

https://bugzilla.redhat.com/show_bug.cgi?id=805942
This commit is contained in:
Lennart Poettering
2012-04-13 23:29:59 +02:00
parent 3b6d9a7c50
commit ecedd90fcd
9 changed files with 163 additions and 101 deletions
+1
View File
@@ -192,6 +192,7 @@ int exec_spawn(ExecCommand *command,
bool confirm_spawn,
struct CGroupBonding *cgroup_bondings,
struct CGroupAttribute *cgroup_attributes,
const char *cgroup_suffix,
pid_t *ret);
void exec_command_done(ExecCommand *c);