2个稳定版本
3.5.7 | 2024年3月10日 |
---|---|
3.5.6 | 2023年12月15日 |
3.5.5 |
|
3.5.4 |
|
3.5.2 |
|
在操作系统分类中排名第103
每月下载量2,139
在 7 crates中使用
25KB
344 行
CtrlC2
由于这个原因,我决定从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。
许可证
在以下许可证中选择一项
- Apache许可证,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT),任选其一。
贡献
除非您明确声明,否则您有意提交以包含在作品中的任何贡献将按上述方式双许可,不附加任何额外条款或条件。
类似crate
有一些替代品可以提供对不同的信号的控制,并添加异步支持。
依赖
~2–12MB
~127K SLoC