1#[cfg(unix)]
2#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub enum UnixSignal {
4 Interrupt,
5 Terminate,
6 Kill,
7}
8
9#[cfg(unix)]
10pub fn unix_set_priority(pid: u32, nice: i32) -> Result<(), std::io::Error> {
11 let result = unsafe { libc::setpriority(libc::PRIO_PROCESS, pid, nice) };
12 if result == -1 {
13 return Err(std::io::Error::last_os_error());
14 }
15 Ok(())
16}
17
18#[cfg(unix)]
19pub fn unix_signal_process(pid: u32, signal: UnixSignal) -> Result<(), std::io::Error> {
20 let result = unsafe { libc::kill(pid as i32, unix_signal_raw(signal)) };
21 if result == -1 {
22 return Err(std::io::Error::last_os_error());
23 }
24 Ok(())
25}
26
27#[cfg(unix)]
28pub fn unix_signal_process_group(pid: i32, signal: UnixSignal) -> Result<(), std::io::Error> {
29 let result = unsafe { libc::killpg(pid, unix_signal_raw(signal)) };
30 if result == -1 {
31 return Err(std::io::Error::last_os_error());
32 }
33 Ok(())
34}
35
36#[cfg(unix)]
37pub(crate) fn unix_signal_raw(signal: UnixSignal) -> i32 {
38 match signal {
39 UnixSignal::Interrupt => libc::SIGINT,
40 UnixSignal::Terminate => libc::SIGTERM,
41 UnixSignal::Kill => libc::SIGKILL,
42 }
43}