[−][src]Crate process_control
This crate allows running a process with a timeout, with the option to terminate it automatically afterward. The latter is surprisingly difficult to achieve on Unix, since process identifiers can be arbitrarily reassigned when no longer used. Thus, it would be extremely easy to inadvertently terminate an unexpected process. This crate protects against that possibility.
Methods for creating timeouts are available on ChildExt
, which is
implemented for Child
. They each return a builder of options to
configure how the timeout should be applied.
Implementation
All traits are sealed, meaning that they can only be implemented by this crate. Otherwise, backward compatibility would be more difficult to maintain for new features.
Features
These features are optional and can be enabled or disabled in a "Cargo.toml" file.
Optional Features
- crossbeam-channel - Changes the implementation to use crate crossbeam-channel for better performance.
Comparable Crates
- wait-timeout -
Made for a related purpose but does not provide the same functionality.
Processes cannot be terminated automatically, and there is no counterpart
of
Child::wait_with_output
to read output while setting a timeout. This crate aims to fill in those gaps and simplify the implementation, now thatReceiver::recv_timeout
exists.
Examples
use std::io; use std::process::Command; use std::process::Stdio; use std::time::Duration; use process_control::ChildExt; use process_control::Timeout; let process = Command::new("echo") .arg("hello") .stdout(Stdio::piped()) .spawn()?; let output = process .with_output_timeout(Duration::from_secs(1)) .terminating() .wait()? .ok_or_else(|| { io::Error::new(io::ErrorKind::TimedOut, "Process timed out") })?; assert_eq!(b"hello", &output.stdout[..5]);
Structs
ExitStatus | Equivalent to |
Output | Equivalent to |
Terminator | A wrapper that stores enough information to terminate a process. |
Traits
ChildExt | Extensions to |
Timeout | A temporary wrapper for a process timeout. |