process_alive/
unix.rs

1use std::io::Error;
2
3use libc::kill;
4
5use crate::{Pid, State};
6
7pub fn state(pid: Pid) -> State {
8    let pid: i32 = match pid.0.try_into() {
9        Ok(pid) => pid,
10        Err(_) => return State::Unknown,
11    };
12
13    unsafe {
14        if kill(pid, 0) == 0 {
15            return State::Alive;
16        }
17    }
18
19    let errno = Error::last_os_error().raw_os_error().unwrap();
20    if errno == libc::ESRCH {
21        State::Dead
22    } else {
23        State::Unknown
24    }
25}