--- sapi/fpm/fpm/fpm_children.c.orig	2021-01-05 03:45:07.000000000 -0700
+++ sapi/fpm/fpm/fpm_children.c	2021-02-04 16:59:32.198595918 -0700
@@ -431,6 +431,39 @@
 				zlog(ZLOG_DEBUG, "unblocking signals, child born");
 				fpm_signals_unblock();
 				child->pid = pid;
+
+				//DA_START
+				char user_slice[128];
+				char systemd_start[128];
+				snprintf(systemd_start, sizeof(systemd_start), "/bin/systemctl start user-%d.slice", wp->set_uid);
+				snprintf(user_slice, sizeof(user_slice), "/sys/fs/cgroup/user.slice/user-%d.slice", wp->set_uid);
+				if (mkdir(user_slice, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0 || errno == EEXIST) {
+					strcat(user_slice, "/directadmin-exec.scope");
+					if (mkdir(user_slice, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0 || errno == EEXIST) {
+						strcat(user_slice, "/cgroup.procs");
+						FILE *fp = fopen(user_slice, "a");
+						//if there is no cgroup, we may hit permission denied. Wait moment.
+						if (fp == NULL) {
+							struct timespec ns;
+							ns.tv_sec = 0;
+							ns.tv_nsec = 10 * 1000000; //10ms
+							int count=20;
+							while (fp == NULL && count--) {
+								nanosleep(&ns, NULL);
+								fp = fopen(user_slice, "a");
+							}
+						}
+						if (fp == NULL) {
+							zlog(ZLOG_WARNING, "Error opening %s for writing: %s", user_slice, strerror(errno));
+						} else {
+							fprintf(fp, "%d\n", (int) pid);
+							fclose(fp);
+						}
+						system(systemd_start);
+					}
+				}
+				//DA_END
+
 				fpm_clock_get(&child->started);
 				fpm_parent_resources_use(child);
