use crate::tasks::process::group::builder::ProcessGroup;
use crate::tasks::process::group::error::ProcessGroupError;
impl ProcessGroup {
#[cfg(unix)]
pub fn send_signal(&self, signal: nix::sys::signal::Signal) -> Result<(), ProcessGroupError> {
use nix::sys::signal::killpg;
use nix::unistd::Pid;
if let Some(pgid) = self.inner.process_group_id {
use nix::errno::Errno;
match killpg(Pid::from_raw(pgid), signal) {
Ok(_) => Ok(()),
Err(e) => match e {
Errno::ESRCH => Ok(()), Errno::EPERM => Err(ProcessGroupError::SignalFailed(format!(
"Permission denied to send signal {:?} to process group {}",
signal, pgid
))),
_ => Err(ProcessGroupError::SignalFailed(format!(
"Failed to send signal {:?} to process group {}: {}",
signal, pgid, e
))),
},
}
} else {
Err(ProcessGroupError::SignalFailed(
"No process group ID available".to_string(),
))
}
}
}