Crates.io | clonablechild |
lib.rs | clonablechild |
version | 0.1.1 |
source | src |
created_at | 2016-12-23 16:36:14.060627 |
updated_at | 2017-01-05 13:33:48.492744 |
description | Extends and wraps `std::process::Child` to make it clonable |
homepage | https://github.com/faern/clonablechild |
repository | https://github.com/faern/clonablechild |
max_upload_size | |
id | 7749 |
size | 25,662 |
Extends and wraps std::process::Child
to make it clonable. Thus eliminating the problem that
libstd
does not have a cross platfrom and simple way to kill a child while also waiting for it.
Add the dependency to your Cargo.toml:
[dependencies]
clonablechild = "0.1"
Use it in your program to kill a sleep process before it terminates naturally:
fn main() {
// This command is specific to unix systems. See tests for Windows examples.
let child = Command::new("sleep").arg("10").spawn().unwrap();
let clonable_child = child.into_clonable();
kill_async(clonable_child.clone());
let exit_status = clonable_child.wait().unwrap();
// Assert child was killed by a signal and did not exit cleanly
assert_eq!(None, exit_status.code());
assert!(!exit_status.success());
}
fn kill_async(child: ClonableChild) {
thread::spawn(move || {
thread::sleep(Duration::new(1, 0));
child.kill().expect("Expected to be able to kill subprocess");
});
}