#mio #pidfd #linux #pid

mio-pidfd

mio 对 Linux 的 pidfd 支持

4 个版本 (2 个重大更新)

0.3.0 2021 年 12 月 5 日
0.2.0 2021 年 2 月 15 日
0.1.1 2019 年 9 月 24 日
0.1.0 2019 年 9 月 23 日

异步 中排名第 1057

MIT 许可证

14KB
207 代码行

mio-pidfd

mio 提供的 Linux pidfd 包装器。这对于使用 mio 以非阻塞事件驱动方式等待多个子进程退出非常有用。

深受 mio-timerfd 启发

示例

use mio_pidfd::PidFd;
use mio::{Poll, Events, Token, Ready, PollOpt};
use std::process::{Command, Child};

let poll = Poll::new().unwrap();
let mut events = Events::with_capacity(1024);
let mut child = Command::new("/bin/sleep").arg("1").spawn().unwrap();
let pidfd = PidFd::new(&child).unwrap();

poll.register(&pidfd, Token(0), Ready::readable(), PollOpt::edge())
             .unwrap();

poll.poll(&mut events, None).unwrap();
assert!(child.try_wait().unwrap().unwrap().code().unwrap() == 0);

要求

此库依赖于在 Linux 内核版本 5.3 中引入的系统调用 pidfd_open()。系统调用 pidfd_send_signal()(由辅助的 kill() 功能使用)在 Linux 内核版本 5.1 中引入。

依赖项

~0.3–10MB
~62K SLoC