#child-process #timeout #wait #waiting

bin+lib wait-timeout

A crate to wait on a child process with a timeout specified across Unix and Windows platforms

7 releases

Uses old Rust 2015

0.2.1 Feb 3, 2025
0.2.0 Nov 23, 2018
0.1.5 Mar 7, 2017
0.1.4 Feb 10, 2017
0.1.0 Sep 8, 2015

#19 in Operating systems

Download history 546046/week @ 2024-11-19 470480/week @ 2024-11-26 559942/week @ 2024-12-03 668388/week @ 2024-12-10 550471/week @ 2024-12-17 278640/week @ 2024-12-24 431282/week @ 2024-12-31 757430/week @ 2025-01-07 761452/week @ 2025-01-14 771984/week @ 2025-01-21 844616/week @ 2025-01-28 941357/week @ 2025-02-04 1021002/week @ 2025-02-11 1014722/week @ 2025-02-18 1011781/week @ 2025-02-25 1216606/week @ 2025-03-04

4,424,346 downloads per month
Used in 1,718 crates (78 directly)

MIT/Apache

17KB
242 lines

wait-timeout

Build Status

Documentation

Rust crate for waiting on a Child process with a timeout specified.

# Cargo.toml
[dependencies]
wait-timeout = "0.1.5"

lib.rs:

A crate to wait on a child process with a particular timeout.

This crate is an implementation for Unix and Windows of the ability to wait on a child process with a timeout specified. On Windows the implementation is fairly trivial as it's just a call to WaitForSingleObject with a timeout argument, but on Unix the implementation is much more involved. The current implementation registers a SIGCHLD handler and initializes some global state. This handler also works within multi-threaded environments. If your application is otherwise handling SIGCHLD then bugs may arise.

Example

use std::process::Command;
use wait_timeout::ChildExt;
use std::time::Duration;

let mut child = Command::new("foo").spawn().unwrap();

let one_sec = Duration::from_secs(1);
let status_code = match child.wait_timeout(one_sec).unwrap() {
    Some(status) => status.code(),
    None => {
        // child hasn't exited yet
        child.kill().unwrap();
        child.wait().unwrap().code()
    }
};

Dependencies

~43KB