2个版本
0.1.1 | 2023年1月10日 |
---|---|
0.1.0 | 2023年1月9日 |
#439 在 操作系统
每月 23次下载
12KB
161 行
ragequit
优雅地关闭进程
ragequit
提供一组用于关闭进程的工具。它主要针对服务器进程,但也可能适用于其他应用。
用法
全局 SHUTDOWN
实例用于信号关闭事件,并通过创建 ShutdownListener
来优雅地处理它们。
use ragequit::{init, SHUTDOWN};
#[tokio::main]
async fn main() {
// Install default system signal handlers.
init();
let listener = SHUTDOWN.listen();
tokio::spawn(async move {
// Wait for the shutdown signal.
tokio::pin!(listener);
(&mut listener).await;
// Drop the listener, allowing the main process to exit.
println!("Goodbye");
drop(listener);
});
// Wait for a shutdown signal and for all listeners to be dropped.
SHUTDOWN.wait().await;
}
在进程开始时调用 init
一次,以安装默认的系统信号处理程序。或者,您也可以自己安装系统信号处理程序。
Unix系统示例
use core::ffi::c_int;
use nix::sys::signal::{sigaction, SaFlags, SigAction, SigHandler, SigSet, Signal};
use ragequit::SHUTDOWN;
let action = SigAction::new(SigHandler::Handler(quit), SaFlags::empty(), SigSet::empty());
unsafe {
let _ = sigaction(Signal::SIGINT, &action);
let _ = sigaction(Signal::SIGTERM, &action);
}
extern "C" fn quit(_: c_int) {
SHUTDOWN.quit();
}
Tokio依赖
ragequit
仅依赖于 tokio
的同步原语。它不依赖于 tokio 运行时。ragequit
可在任何异步运行时中工作。
许可
根据您的选择,许可协议为 MIT 许可证或 Apache 许可证版本 2.0。
依赖项
~3–15MB
~179K SLoC