// Copyright 2020 Parity Technologies (UK) Ltd. // This file is part of Substrate. // Substrate is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Substrate is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . use std::{process::{Child, ExitStatus}, thread, time::Duration}; /// Wait for the given `child` the given ammount of `secs`. /// /// Returns the `Some(exit status)` or `None` if the process did not finish in the given time. pub fn wait_for(child: &mut Child, secs: usize) -> Option { for _ in 0..secs { match child.try_wait().unwrap() { Some(status) => return Some(status), None => thread::sleep(Duration::from_secs(1)), } } eprintln!("Took to long to exit. Killing..."); let _ = child.kill(); child.wait().unwrap(); None }