1use libc::{kill, SIGSTOP};
2use rustix::process;
3use serial_test::serial;
4use std::process::{Command, Stdio};
5
6// These tests must execute serially to prevent race condition, where
7// `test_wait` waits for the child process spawned in `test_waitpid`, causing
8// the tests to get stuck.
9
10#[test]
11#[serial]
12fn test_waitpid() {
13    let child = Command::new("yes")
14        .stdout(Stdio::null())
15        .stderr(Stdio::null())
16        .spawn()
17        .expect("failed to execute child");
18    unsafe { kill(child.id() as _, SIGSTOP) };
19
20    let pid = unsafe { process::Pid::from_raw(child.id() as _) };
21    let status = process::waitpid(pid, process::WaitOptions::UNTRACED)
22        .expect("failed to wait")
23        .unwrap();
24    assert!(status.stopped());
25}
26