2 个版本
0.2.4 | 2019年12月20日 |
---|---|
0.2.3 | 2019年12月3日 |
0.2.1 |
|
0.1.0 |
|
#977 in Unix API
在 pidfd_getfd 中使用
10KB
153 行代码(不含注释)
pidfd
此Rust包提供Linux (>= 5.3) PID文件描述符支持。PID文件描述符由进程ID创建,并始终引用创建PID FD的进程。
使用PID FD的好处之一是可以使用 poll()
、select()
和 epoll()
来监控进程何时终止。这使得它在异步编程中使用非常理想。此包实现了 std::future::Future
在 PidFd
类型上,以便可以并发地等待多个进程。
需要Linux 5.4才能使用
waitid
功能,该功能可以获取pidfd的退出状态。
use pidfd::PidFd;
use std::{io, process::Command};
fn main() {
futures::executor::block_on(async move {
futures::try_join!(
spawn_sleeper("1", "5"),
spawn_sleeper("2", "4"),
spawn_sleeper("3", "3"),
spawn_sleeper("4", "2"),
spawn_sleeper("5", "1"),
)
.unwrap();
})
}
async fn spawn_sleeper(id: &str, timeout: &str) -> io::Result<()> {
println!("started job {}", id);
let exit_status = Command::new("/bin/sleep")
.arg(timeout)
.spawn()
.map(PidFd::from)
.unwrap()
.into_future()
.await?;
println!("finished job {}: {}", id, exit_status);
Ok(())
}
许可证
许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,应如上所述双重许可,不附加任何额外条款或条件。
依赖关系
~200KB