use nix::sys::signal::{self, Signal};
use nix::unistd::Pid;
pub(crate) fn send_terminate_signal(pid: u32) {
if let Ok(raw_pid) = i32::try_from(pid) {
let _ = signal::kill(Pid::from_raw(raw_pid), Signal::SIGTERM);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_send_terminate_signal_kills_owned_child() {
let mut child = std::process::Command::new("sleep")
.arg("60")
.spawn()
.expect("failed to spawn sleep");
let child_pid = child.id();
send_terminate_signal(child_pid);
let exit_status = child.wait().expect("failed to wait on child");
assert!(
!exit_status.success(),
"child should have been killed, not exited normally"
);
}
#[test]
fn test_send_terminate_signal_ignores_overflow_pid() {
let overflow_pid = u32::MAX;
send_terminate_signal(overflow_pid);
}
}