use std::io;
#[cfg(all(unix, feature = "process"))]
pub fn kill_process_group(pgid: i32) -> io::Result<()> {
if pgid <= 0 {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
"process group id must be a positive pid",
));
}
let pid = rustix::process::Pid::from_raw(pgid).ok_or_else(|| {
io::Error::new(
io::ErrorKind::InvalidInput,
"process group id must be a positive pid",
)
})?;
rustix::process::kill_process_group(pid, rustix::process::Signal::KILL)
.map_err(|errno| io::Error::from_raw_os_error(errno.raw_os_error()))
}
#[cfg(all(not(unix), feature = "process"))]
pub fn kill_process_group(pgid: i32) -> io::Result<()> {
let _ = pgid;
Err(io::Error::new(
io::ErrorKind::Unsupported,
"process kill_process_group is Unix-only",
))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn invalid_pgid_is_rejected() {
assert!(kill_process_group(0).is_err());
assert!(kill_process_group(-1).is_err());
}
#[test]
#[cfg(unix)]
fn nonexistent_group_surfs_os_error() {
assert!(kill_process_group(i32::MAX).is_err());
}
}