16 个版本
0.3.0-alpha.1 | 2019 年 8 月 8 日 |
---|---|
0.2.9 | 2020 年 2 月 5 日 |
0.2.8 |
|
0.2.7 | 2018 年 11 月 22 日 |
0.1.0 | 2016 年 9 月 10 日 |
#17 in #ctrl-c
14,983 个月下载
在 152 个 (22 直接) 仓库中使用
585KB
10K SLoC
tokio-signal
为 Tokio 实现的 Unix 信号处理。
许可证
本项目根据 MIT 许可证 许可。
贡献
除非你明确声明,否则你提交给 Tokio 的任何有意包含的贡献,都应按 MIT 许可,不附加任何额外条款或条件。
lib.rs
:
为 Tokio 实现的异步信号处理
该包实现了为 Tokio(Rust 中的异步 I/O 框架)提供的异步信号处理。该包导出的主要类型 unix::Signal
允许在 Unix 平台上监听任意信号,并以异步方式接收它们。
请注意,信号处理通常是一个非常复杂的话题,应该谨慎使用。该包尝试实现信号处理的“最佳实践”,但您应该根据您自己的应用程序需求对其进行评估,以确定其是否适用。
该包在 Signal
结构中记录了一些基本限制。
示例
打印出所有接收到的 Ctrl-C 通知
#![feature(async_await)]
use futures_util::future;
use futures_util::stream::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create an infinite stream of "Ctrl+C" notifications. Each item received
// on this stream may represent multiple ctrl-c signals.
let ctrl_c = tokio_signal::CtrlC::new()?;
// Process each ctrl-c as it comes in
let prog = ctrl_c.for_each(|_| {
println!("ctrl-c received!");
future::ready(())
});
prog.await;
Ok(())
}
在 Unix 上等待 SIGHUP
#![feature(async_await)]
use futures_util::future;
use futures_util::stream::StreamExt;
use tokio_signal::unix::{Signal, SIGHUP};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create an infinite stream of "Ctrl+C" notifications. Each item received
// on this stream may represent multiple ctrl-c signals.
let ctrl_c = tokio_signal::CtrlC::new()?;
// Process each ctrl-c as it comes in
let prog = ctrl_c.for_each(|_| {
println!("ctrl-c received!");
future::ready(())
});
prog.await;
// Like the previous example, this is an infinite stream of signals
// being received, and signals may be coalesced while pending.
let stream = Signal::new(SIGHUP)?;
// Convert out stream into a future and block the program
let (signal, _signal) = stream.into_future().await;
println!("got signal {:?}", signal);
Ok(())
}
依赖关系
~3MB
~50K SLoC