- p = strjoina(UNIT(s)->cgroup_path, "/control");
- cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, CGROUP_SIGCONT|CGROUP_IGNORE_SELF|CGROUP_REMOVE, NULL, NULL, NULL);
+ if (s->control_pid > 0) {
+ r = kill_and_sigcont(s->control_pid, SIGKILL);
+ if (r < 0) {
+ _cleanup_free_ char *comm = NULL;
+
+ (void) get_process_comm(s->control_pid, &comm);
+
+ log_unit_debug_errno(UNIT(s), r, "Failed to kill control process " PID_FMT " (%s), ignoring: %m",
+ s->control_pid, strna(comm));
+ }
+ }
+
+ if (UNIT(s)->cgroup_path) {
+ _cleanup_set_free_ Set *pid_set = NULL;
+ char *p;
+
+ if (s->control_pid > 0) {
+ r = set_make(&pid_set, PID_TO_PTR(s->control_pid), NULL);
+ if (r < 0) {
+ log_oom();
+ return;
+ }
+ }
+
+ p = strjoina(UNIT(s)->cgroup_path, "/control");
+ r = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, CGROUP_SIGCONT|CGROUP_IGNORE_SELF|CGROUP_REMOVE, pid_set, NULL, NULL);
+ if (r < 0)
+ log_unit_debug_errno(UNIT(s), r, "Failed to send SIGKILL to processes of control group %s: %m", p);
+ }