cgroup-util: add cg_read_pidref() helper

Just like cg_read_pid() but returns a PidRef
This commit is contained in:
Lennart Poettering
2023-09-19 16:05:01 +02:00
parent 76dc9e249f
commit 12c7d27b65
2 changed files with 29 additions and 0 deletions

View File

@@ -90,6 +90,33 @@ int cg_read_pid(FILE *f, pid_t *ret) {
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,

View File

@@ -10,6 +10,7 @@
#include <sys/types.h>
#include "constants.h"
#include "pidref.h"
#include "set.h"
#define SYSTEMD_CGROUP_CONTROLLER_LEGACY "name=systemd"
@@ -178,6 +179,7 @@ typedef enum CGroupUnified {
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);