use std::{thread, time::Duration};
use libc;
use sysinfo::{ProcessRefreshKind, ProcessesToUpdate, System};
pub fn pidof(name: &str) -> Option<u32> {
let mut wait_time = 0;
let max_wait_time = 10;
log::debug!("Get pid of {}...", name);
let mut sys = System::new_all();
while wait_time < max_wait_time {
sys.refresh_processes_specifics(
ProcessesToUpdate::All,
true,
ProcessRefreshKind::everything().without_tasks(),
);
for (pid, process) in sys.processes() {
log::debug!("Process {}: {:?}", pid.as_u32(), process.name());
if *name == *process.name() {
return Some(pid.as_u32());
}
}
thread::sleep(Duration::from_secs(1));
wait_time += 1;
}
None
}
pub fn is_proc_alive(pid: u32) -> bool {
let status = unsafe { libc::kill(pid as i32, 0) };
if status == -1 { false } else { true }
}