2 个版本

0.2.4 2019年12月20日
0.2.3 2019年12月3日
0.2.1 2019年11月28日
0.1.0 2019年11月27日

#977 in Unix API


pidfd_getfd 中使用

MIT/Apache

10KB
153 行代码(不含注释)

pidfd

此Rust包提供Linux (>= 5.3) PID文件描述符支持。PID文件描述符由进程ID创建,并始终引用创建PID FD的进程。

使用PID FD的好处之一是可以使用 poll()select()epoll() 来监控进程何时终止。这使得它在异步编程中使用非常理想。此包实现了 std::future::FuturePidFd 类型上,以便可以并发地等待多个进程。

需要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-2.0许可证定义的任何有意提交以包含在作品中的贡献,应如上所述双重许可,不附加任何额外条款或条件。

依赖关系

~200KB