#[cfg(unix)]
pub(crate) fn process_is_alive(pid: u32) -> bool {
unsafe { libc::kill(pid as libc::pid_t, 0) == 0 }
}
#[cfg(windows)]
pub(crate) fn process_is_alive(pid: u32) -> bool {
use std::ptr::null_mut;
use windows_sys::Win32::Foundation::CloseHandle;
use windows_sys::Win32::System::Threading::{
OpenProcess, PROCESS_QUERY_LIMITED_INFORMATION, WaitForSingleObject, INFINITE,
};
unsafe {
let handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, 0, pid);
if handle == 0 {
return false;
}
const WAIT_TIMEOUT: u32 = 0x00000102;
let status = WaitForSingleObject(handle, 0);
let alive = status == WAIT_TIMEOUT;
CloseHandle(handle);
alive
}
}