Random stuff, testing things, and so on.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
use std::ffi::OsString;
|
|
|
|
use std::path::PathBuf;
|
|
|
|
use std::time::Duration;
|
|
|
|
|
|
|
|
use tokio::process::Command;
|
|
|
|
use tokio::time::timeout;
|
|
|
|
|
|
|
|
/// Special script that looks for some file in $PATH.
|
|
|
|
fn search_in_path(name: &str) -> Option<PathBuf> {
|
|
|
|
let path = std::env::var_os("PATH").unwrap_or_else(OsString::new);
|
|
|
|
std::env::split_paths(&path).find_map(|dir| {
|
|
|
|
let full_path = dir.join(name);
|
|
|
|
if full_path.is_file() {
|
|
|
|
Some(full_path)
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
#[tokio::main(flavor = "current_thread")]
|
|
|
|
async fn main() {
|
|
|
|
let sleep = search_in_path("sleep").unwrap();
|
|
|
|
|
|
|
|
println!("Run 3 secs");
|
|
|
|
let mut cmd = Command::new(&sleep).arg("3s").spawn().unwrap();
|
|
|
|
if let Err(_) = timeout(Duration::from_secs(4), cmd.wait()).await {
|
|
|
|
println!("Got timeout!");
|
|
|
|
cmd.kill().await.unwrap();
|
|
|
|
} else {
|
|
|
|
println!("No timeout");
|
|
|
|
}
|
|
|
|
|
|
|
|
println!("Run 25 secs");
|
|
|
|
let mut cmd = Command::new(&sleep).arg("25s").spawn().unwrap();
|
|
|
|
if let Err(_) = timeout(Duration::from_secs(4), cmd.wait()).await {
|
|
|
|
println!("Got timeout");
|
|
|
|
cmd.kill().await.unwrap();
|
|
|
|
} else {
|
|
|
|
println!("No timeout");
|
|
|
|
}
|
|
|
|
}
|