#signal #signal-handler #future #tokio #unix #monoio #compio

signalfut

类似于 tokio::signal::unix::Signal 的 future,但可以与所有运行时一起使用

1 个不稳定版本

0.1.0 2024年6月5日

#466异步

Download history 139/week @ 2024-06-04 2/week @ 2024-06-11

每月141次下载

Apache-2.0

23KB
372

signalfut

crates.io docs.rs msrv BUILD

类似于 tokio::signal::unix::Signal 的 future,但可以与

  • Tokio
  • async-std
  • futures
  • smol
  • Monoio
  • Glommio
  • Compio

支持的平台

目前仅支持Linux和macOS。Windows也将在未来支持。

示例

在接收到 SIGINTSIGQUIT 之一时打招呼

use signalfut::ctrl_c;
use signalfut::Signal;
use signalfut::SignalFut;

#[tokio::main]
async fn main() {
    tokio::select! {
        _ = ctrl_c() => {},
        _ = SignalFut::new(Signal::SIGQUIT) => {},
    }
    println!("Greeting!");
}

让多个任务等待同一个信号

use signalfut::ctrl_c;

#[tokio::main]
async fn main() {
    let fut1 = ctrl_c();
    let fut2 = ctrl_c();

    tokio::join!(fut1, fut2);
}

信号处理程序

该crate为要监视的信号分配了一个信号处理程序,因为信号处理程序由整个进程共享,不要使用其他也进行此操作的crate,它们将冲突。

分配后,不会重置默认的信号处理程序。

辅助线程和信号安全性

此crate创建一个辅助线程来执行非信号安全的代码,信号处理程序和辅助线程通过操作系统管道进行通信,信号处理程序所做的唯一一件事是 write(2),这是信号安全的。

依赖关系

~3MB
~60K SLoC