Start services with clone3() and place in cgroup directly

This commit activates the use of clone3() for service_fork(), to allow
Linux to create the new process directly in the correct cgroup instead
of later moving it there -- much cheaper and less error prone.

To facilitate this a few new helper cgroup functions have been added and
two new configuration directives introduced: delegate and name:leafname.
The delegate option is for running, e.g., container runtimes that want
to create their own cgroup v2 structur, and the name:leafname allows a
user to change the name of the subgroup under user/system/init.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2025-12-15 22:04:31 +01:00
1 parent 4877aecc1e
commit 567c695954
6 files changed
+316 -76

No files matched your search

+18 -8
View File
@@ -26,21 +26,31 @@
#include <uev/uev.h>
/* Forward declaration */
typedef struct svc svc_t;
struct cgroup {
char name[16];
char cfg[128];
char leafname[128];
char delegate;
};
void cgroup_mark_all(void);
void cgroup_cleanup (void);
void cgroup_mark_all(void);
void cgroup_cleanup (void);
int cgroup_add (char *name, char *cfg, int is_protected);
int cgroup_del (char *dir);
void cgroup_config (void);
int cgroup_add (char *name, char *cfg, int is_protected);
int cgroup_del (char *dir);
int cgroup_del_svc (svc_t *svc, const char *name);
void cgroup_config (void);
void cgroup_init (uev_ctx_t *ctx);
void cgroup_init (uev_ctx_t *ctx);
int cgroup_user (char *name, int pid);
int cgroup_service (char *name, int pid, struct cgroup *cg);
int cgroup_user (const char *name, int pid);
int cgroup_service (const char *name, int pid, struct cgroup *cg, char *username, char *group);
char *cgroup_svc_name(svc_t *svc, char *buf, size_t len);
int cgroup_prepare (svc_t *svc, const char *name);
int cgroup_watch (const char *group, const char *name);
#endif /* FINIT_CGROUP_H_ */