我正在尝试编写一些代码来捕获像 SIGTERM 这样的信号。
我找到了 this我还找到了How to handle blocking i/o in Rust, or long running external function calls in general .
但是在当前的 Rust 版本中(每晚 0.12)似乎 std::io::signal::Listener
被删除了。是不是放到别的地方了?如果可以,有人可以告诉我如何捕捉信号吗?
最佳答案
现在看来实现它已经相当简单了。 Signal handling section Rust 中的命令行应用程序回顾了这个概念,并提到了 ctrlc crate 来处理该特定信号,以及 signal-hook用于处理一般信号的 crate 。
通过指南,使用 signal-hook 它应该像这样简单:
use std::{error::Error, thread};
use signal_hook::{iterator::Signals, SIGTERM};
fn main() -> Result<(), Box<Error>> {
let signals = Signals::new(&[SIGTERM])?;
thread::spawn(move || {
for sig in signals.forever() {
println!("Received signal {:?}", sig);
}
});
Ok(())
}
关于rust - 如何在 Rust 中捕获信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280859/