wait-parent 0.1.1

Wait for the parent process to exit
Documentation
use std::process::ExitStatus;

#[cfg(feature = "debug")]
#[doc(hidden)]
#[allow(unused)]
macro_rules! sysinfo_debug {
    ($($x:tt)*) => {{
        eprintln!($($x)*);
    }}
}

#[cfg(not(feature = "debug"))]
#[doc(hidden)]
#[allow(unused)]
macro_rules! sysinfo_debug {
    ($($x:tt)*) => {{}};
}

/// Wait for the parent process to exit.
///
/// ## Returns
/// - `None` if the parent process has already exited
pub fn wait_parent() -> Option<ExitStatus> {
    let mut system = sysinfo::System::new();
    let current_pid = sysinfo::get_current_pid().unwrap();
    system.refresh_processes_specifics(
        sysinfo::ProcessesToUpdate::Some(&[current_pid]),
        false,
        sysinfo::ProcessRefreshKind::nothing(),
    );
    let parent_pid = system.process(current_pid).unwrap().parent().unwrap();
    sysinfo_debug!("parent_pid: {:?}", parent_pid);
    system.refresh_processes_specifics(
        sysinfo::ProcessesToUpdate::Some(&[parent_pid]),
        false,
        sysinfo::ProcessRefreshKind::nothing(),
    );
    match system.process(parent_pid) {
        Some(parent) => parent.wait(),
        None => {
            sysinfo_debug!("parent process not found: {:?}", parent_pid);
            None
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
}