1use std::process::ExitStatus;
2
3#[cfg(feature = "debug")]
4#[doc(hidden)]
5#[allow(unused)]
6macro_rules! sysinfo_debug {
7 ($($x:tt)*) => {{
8 eprintln!($($x)*);
9 }}
10}
11
12#[cfg(not(feature = "debug"))]
13#[doc(hidden)]
14#[allow(unused)]
15macro_rules! sysinfo_debug {
16 ($($x:tt)*) => {{}};
17}
18
19pub fn wait_parent() -> Option<ExitStatus> {
24 let mut system = sysinfo::System::new();
25 let current_pid = sysinfo::get_current_pid().unwrap();
26 system.refresh_processes_specifics(
27 sysinfo::ProcessesToUpdate::Some(&[current_pid]),
28 false,
29 sysinfo::ProcessRefreshKind::nothing(),
30 );
31 let parent_pid = system.process(current_pid).unwrap().parent().unwrap();
32 sysinfo_debug!("parent_pid: {:?}", parent_pid);
33 system.refresh_processes_specifics(
34 sysinfo::ProcessesToUpdate::Some(&[parent_pid]),
35 false,
36 sysinfo::ProcessRefreshKind::nothing(),
37 );
38 match system.process(parent_pid) {
39 Some(parent) => parent.wait(),
40 None => {
41 sysinfo_debug!("parent process not found: {:?}", parent_pid);
42 None
43 }
44 }
45}
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50}