aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/cgroup.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil/cgroup.cc')
-rw-r--r--src/libutil/cgroup.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/libutil/cgroup.cc b/src/libutil/cgroup.cc
index f693d77be..a008481ca 100644
--- a/src/libutil/cgroup.cc
+++ b/src/libutil/cgroup.cc
@@ -2,6 +2,7 @@
#include "cgroup.hh"
#include "util.hh"
+#include "finally.hh"
#include <chrono>
#include <cmath>
@@ -10,9 +11,25 @@
#include <thread>
#include <dirent.h>
+#include <mntent.h>
namespace nix {
+std::optional<Path> getCgroupFS()
+{
+ static auto res = [&]() -> std::optional<Path> {
+ auto fp = fopen("/proc/mounts", "r");
+ if (!fp) return std::nullopt;
+ Finally delFP = [&]() { fclose(fp); };
+ while (auto ent = getmntent(fp))
+ if (std::string_view(ent->mnt_type) == "cgroup2")
+ return ent->mnt_dir;
+
+ return std::nullopt;
+ }();
+ return res;
+}
+
// FIXME: obsolete, check for cgroup2
std::map<std::string, std::string> getCgroups(const Path & cgroupFile)
{