int cg_create(const char *controller, const char *path, const char *suffix) { _cleanup_free_ char *fs = NULL; int r; #ifdef HAVE_CGMANAGER /* CGManager support */ int existed; if (cgm_dbus_connect()) { if (!controller) { cgm_dbus_disconnect(); return -1; } r = cgm_create(normalize_controller(controller), path, &existed); cgm_dbus_disconnect(); if (!r) return -1; return 1; } #endif r = cg_get_path_and_check(controller, path, suffix, &fs); if (r < 0) return r; r = mkdir_parents_label(fs, 0755); if (r < 0) return r; if (mkdir(fs, 0755) < 0) { if (errno == EEXIST) return 0; return -errno; } return 1; }
int cg_attach(const char *controller, const char *path, pid_t pid) { char *fs; int r; char c[32]; assert(controller); assert(path); assert(pid >= 0); r = cg_get_path_and_check(controller, path, "tasks", &fs); if (r < 0) return r; if (pid == 0) pid = getpid(); snprintf(c, sizeof(c), "%lu\n", (unsigned long) pid); char_array_0(c); r = write_one_line_file(fs, c); free(fs); return r; }