diff --git a/src/sandbox/mod.rs b/src/sandbox/mod.rs index 5b3caf9..7b3b1ab 100644 --- a/src/sandbox/mod.rs +++ b/src/sandbox/mod.rs @@ -1,7 +1,7 @@ mod cgroup; mod resource; -use std::{io, os::unix::process::ExitStatusExt, time::Duration}; +use std::{io, os::unix::process::ExitStatusExt, process, time::Duration}; use tokio::{ process::{Child, Command}, @@ -46,7 +46,19 @@ impl Sandbox { } pub fn spawn(&self, mut command: Command) -> io::Result { - command.spawn() + let cgroup = self.cgroup.clone(); + + unsafe { + command + .pre_exec(move || { + let id = process::id(); + + cgroup + .add_task_by_tgid(CgroupPid::from(id as u64)) + .map_err(io::Error::other) + }) + .spawn() + } } pub async fn monitor(&self, mut child: Child) -> io::Result<(Option, Duration, Byte)> {