in reverie-ptrace/src/trace/waitid.rs [266:291]
fn waitid_w_nohang_then_kill() {
let fork_result = unsafe { unistd::fork() };
assert!(fork_result.is_ok());
match fork_result.unwrap() {
ForkResult::Parent { child, .. } => {
assert_eq!(
waitid(
IdType::Pid(child),
WaitPidFlag::WEXITED | WaitPidFlag::WNOHANG
),
Ok(WaitStatus::StillAlive),
);
assert!(nix::sys::signal::kill(child, Signal::SIGINT).is_ok());
assert_eq!(
waitid(IdType::Pid(child), WaitPidFlag::WEXITED),
Ok(WaitStatus::Signaled(child, Signal::SIGINT, false))
);
}
ForkResult::Child => {
let one_sec = std::time::Duration::from_millis(100);
loop {
std::thread::sleep(one_sec);
}
}
}
}