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}