Easily spawn and manage a set of processes.
```rust use std::process::Command;
use spawn_wait::{ProcessSet, SignalHandler, WaitAnyResult};
fn sleepcmd(secs: i32) -> Command { let mut cmd = Command::new("sleep"); cmd.arg(secs.tostring()); cmd }
fn main() { let mut procs = ProcessSet::new();
// You can set a limit on concurrency with ProcessSet::withconcurrencylimit(number).
// Associate each process with a key (Hash + Eq + Clone) procs.addcommand(3, sleepcmd(3)); procs.addcommand(1, sleepcmd(1)); procs.addcommand(2, sleepcmd(2));
let mut sh = SignalHandler::default(); loop { match procs.waitany(&mut sh) { WaitAnyResult::NoProcessesRunning => { println!("All done"); return; } WaitAnyResult::ReceivedTerminationSignal() => { // The crate handles SIGINT for you, so you can exit cleanly // when the user presses ctrl-c. println!("Terminating"); procs.sigintalland_wait(&mut sh).unwrap(); return; } WaitAnyResult::Subprocess(id, r) => { println!("Process {} finished: {:?}", id, r); } } } }
```