1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
//! Uses the `async_io::os::kqueue` module to wait for a process to terminate.
//!
//! Run with:
//!
//! ```
//! cargo run --example kqueue-process
//! ```
#[cfg(any(
target_os = "macos",
target_os = "ios",
target_os = "tvos",
target_os = "watchos",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "dragonfly",
))]
fn main() -> std::io::Result<()> {
use std::process::Command;
use async_io::os::kqueue::{Exit, Filter};
use futures_lite::future;
future::block_on(async {
// Spawn a process.
let process = Command::new("sleep")
.arg("3")
.spawn()
.expect("failed to spawn process");
// Wrap the process in an `Async` object that waits for it to exit.
let process = Filter::new(Exit::new(process))?;
// Wait for the process to exit.
process.ready().await?;
Ok(())
})
}
#[cfg(not(any(
target_os = "macos",
target_os = "ios",
target_os = "tvos",
target_os = "watchos",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "dragonfly",
)))]
fn main() {
println!("This example only works for kqueue-enabled platforms.");
}
|