1个不稳定版本
0.1.1 | 2021年11月7日 |
---|
#715 在 操作系统
9KB
61 行
优雅的
优雅地关闭。
用法
参见simple.rs获取简单示例。
许可证
Graceful主要在MIT许可证和Apache许可证(版本2.0)的条款下分发,部分内容受各种类似BSD的许可证覆盖。
有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。
lib.rs
:
优雅关闭。
(Unix) 异步信号处理比较复杂。此工具允许您阻塞主线程并执行任意(线程安全)代码以优雅地关闭进程。
用法
- 在创建任何其他线程之前初始化SignalGuard。
- SignalGuard将在初始化期间阻塞必要的信号(在*nix上为
SIGINT
、SIGQUIT
和SIGTERM
,在Windows上为Ctrl+C
和Ctrl+Break
)。 - 派生新线程以进行实际工作。
- 注册一个处理程序以优雅地关闭应用程序。
- 主线程将在接收到信号之前被阻塞。
- 处理程序将在主线程中运行。
- 在Windows上,处理程序返回后(以及可能的任何libc
atexit
处理程序),进程将终止。
示例
extern crate graceful;
use std::sync::atomic::{ATOMIC_BOOL_INIT, AtomicBool, Ordering};
use std::time::Duration;
use std::thread;
use graceful::SignalGuard;
static STOP: AtomicBool = ATOMIC_BOOL_INIT;
fn main() {
let signal_guard = SignalGuard::new();
let handle = thread::spawn(|| {
println!("Worker thread started. Type Ctrl+C to stop.");
while !STOP.load(Ordering::Acquire) {
println!("working...");
thread::sleep(Duration::from_millis(500));
}
println!("Bye.");
});
signal_guard.at_exit(move |sig| {
println!("Signal {} received.", sig);
STOP.store(true, Ordering::Release);
handle.join().unwrap();
});
}
依赖关系
~2MB
~38K SLoC