sleep/
sleep.rs

1use std::process::Command;
2
3use spawn_wait::{ProcessSet, SignalHandler, WaitAnyResult};
4
5fn sleep_cmd(secs: i32) -> Command {
6  let mut cmd = Command::new("sleep");
7  cmd.arg(secs.to_string());
8  cmd
9}
10
11fn main() {
12  let mut procs = ProcessSet::new();
13  procs.add_command(3, sleep_cmd(3));
14  procs.add_command(1, sleep_cmd(1));
15  procs.add_command(2, sleep_cmd(2));
16
17  let mut sh = SignalHandler::default();
18  loop {
19    match procs.wait_any(&mut sh) {
20      WaitAnyResult::NoProcessesRunning => {
21        println!("All done");
22        return;
23      }
24      WaitAnyResult::ReceivedTerminationSignal(_) => {
25        println!("Terminating");
26        procs.sigint_all_and_wait(&mut sh).unwrap();
27        return;
28      }
29      WaitAnyResult::Subprocess(id, r) => {
30        println!("Process {} finished: {:?}", id, r);
31      }
32    }
33  }
34}