malvin 0.2.5

Non-interactive research and coding agent
use std::collections::HashSet;
use std::os::unix::process::CommandExt;

pub fn spawn_std_sleep_child_in_new_process_group() -> (std::process::Child, u32, HashSet<u32>) {
    crate::test_utils::enable_test_fast_teardown();
    let baseline = crate::acp::snapshot_pids();
    let mut cmd = std::process::Command::new("sleep");
    unsafe {
        cmd.arg("30").pre_exec(|| {
            if libc::setpgid(0, 0) != 0 {
                return Err(std::io::Error::last_os_error());
            }
            Ok(())
        });
    }
    let child = cmd.spawn().expect("spawn sleep");
    let pgid = child.id();
    (child, pgid, baseline)
}