diff --git a/src/libutil/linux/cgroup.cc b/src/libutil/linux/cgroup.cc index 4acfe82f1..ae90565a9 100644 --- a/src/libutil/linux/cgroup.cc +++ b/src/libutil/linux/cgroup.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -101,6 +102,11 @@ static CgroupStats destroyCgroup(const std::filesystem::path & cgroup, bool retu // FIXME: pid wraparound if (kill(pid, SIGKILL) == -1 && errno != ESRCH) throw SysError("killing member %d of cgroup '%s'", pid, cgroup); + + while (waitpid(pid, nullptr, 0) == -1) { + if (errno == ECHILD) break; // Process already reaped + if (errno != EINTR) throw SysError("waiting for pid %d", pid); + } } auto sleep = std::chrono::milliseconds((int) std::pow(2.0, std::min(round, 10)));