Just like cg_read_pid() but returns a PidRef
return 1;
}
+int cg_read_pidref(FILE *f, PidRef *ret) {
+ int r;
+
+ assert(f);
+ assert(ret);
+
+ for (;;) {
+ pid_t pid;
+
+ r = cg_read_pid(f, &pid);
+ if (r < 0)
+ return r;
+ if (r == 0) {
+ *ret = PIDREF_NULL;
+ return 0;
+ }
+
+ r = pidref_set_pid(ret, pid);
+ if (r >= 0)
+ return 1;
+ if (r != -ESRCH)
+ return r;
+
+ /* ESRCH → gone by now? just skip over it, read the next */
+ }
+}
+
int cg_read_event(
const char *controller,
const char *path,
#include <sys/types.h>
#include "constants.h"
+#include "pidref.h"
#include "set.h"
#define SYSTEMD_CGROUP_CONTROLLER_LEGACY "name=systemd"
int cg_enumerate_processes(const char *controller, const char *path, FILE **ret);
int cg_read_pid(FILE *f, pid_t *ret);
+int cg_read_pidref(FILE *f, PidRef *ret);
int cg_read_event(const char *controller, const char *path, const char *event, char **ret);
int cg_enumerate_subgroups(const char *controller, const char *path, DIR **ret);