#ctrl-c #signal-handler #signal #sigint

ctrlc2

为Rust项目提供的简单易用的Ctrl-C处理器版本2

2个稳定版本

3.5.7 2024年3月10日
3.5.6 2023年12月15日
3.5.5 2023年11月21日
3.5.4 2023年11月20日
3.5.2 2023年11月5日

操作系统分类中排名第103

Download history 609/week @ 2024-03-14 463/week @ 2024-03-21 487/week @ 2024-03-28 461/week @ 2024-04-04 510/week @ 2024-04-11 488/week @ 2024-04-18 599/week @ 2024-04-25 604/week @ 2024-05-02 415/week @ 2024-05-09 378/week @ 2024-05-16 558/week @ 2024-05-23 906/week @ 2024-05-30 666/week @ 2024-06-06 704/week @ 2024-06-13 422/week @ 2024-06-20 234/week @ 2024-06-27

每月下载量2,139
7 crates中使用

MIT/Apache

25KB
344

CtrlC2

Version Documentation Download License

由于这个原因,我决定从ctrlc创建一个分支并维护它。我会努力使其与原始仓库保持更新。如果您有任何建议或想做出贡献,请打开一个issue或PR。谢谢!我会尽快回复issue和PR。

围绕Ctrl-C信号的一个简单易用的包装器。

文档

示例用法

cargo.toml

[dependencies]
ctrlc2 = "3.5"

然后,在main.rs

use std::sync::mpsc::channel;
use ctrlc2;

fn main() {
    let (tx, rx) = channel();
    
    let handle = ctrlc2::set_handler(move || {tx.send(()).expect("Could not send signal on channel."); true})
        .expect("Error setting Ctrl-C handler");
    
    println!("Waiting for Ctrl-C...");
    rx.recv().expect("Could not receive from channel.");
    println!("Got it! Exiting..."); 
    handle.join().unwrap();
}

异步支持

此库现在支持使用tokio运行时进行异步操作。

通过特性标志选择tokio(例如:--no-default-features --features tokio)

#[cfg(feature = "tokio")]
#[cfg_attr(feature = "tokio", tokio::main(flavor = "current_thread"))]
async fn main() {
    let (tx, mut rx) = tokio::sync::mpsc::channel::<()>(1);

    ctrlc2::set_async_handler(async move {
        tx.send(())
            .await
            .expect("Could not send signal on channel.");
    })
    .await;

    println!("Waiting for Ctrl-C...");
    rx.recv().await.expect("Could not receive from channel.");
    println!("Got it! Exiting...");
}

自己尝试示例

cargobuild --examples && target/debug/examples/readme_example

处理SIGTERM和SIGHUP

使用termination特性将CtrlC添加到Cargo.toml中,CtrlC将处理SIGINT、SIGTERM和SIGHUP。

许可证

在以下许可证中选择一项

贡献

除非您明确声明,否则您有意提交以包含在作品中的任何贡献将按上述方式双许可,不附加任何额外条款或条件。

类似crate

有一些替代品可以提供对不同的信号的控制,并添加异步支持。

依赖

~2–12MB
~127K SLoC