use libc::{pid_t, SIGCHLD, waitpid, WNOHANG, sigaction, sigemptyset, SA_RESTART}; use std::ffi::c_int; fn sigchild_handler(_signal: c_int) { loop { let mut status: c_int = 0; let pid: pid_t = unsafe { waitpid(-1 , &mut status, WNOHANG) }; if pid <= 0 { break; } } } pub fn sigchild_handler() -> Result<(), Box> { unsafe { let mut sigact: sigaction = std::mem::zeroed(); sigact.sa_sigaction = sigchild_handler as usize; sigemptyset(&mut sigact.sa_mask); sigact.sa_flags = SA_RESTART; if sigaction(SIGCHLD, &sigact, std::ptr::null_mut()) == -1 { Err("Sigaction check returned -1".into()) } else { Ok(()) } } }