rust - 如何在 Rust 中捕获信号

标签 rust

我正在尝试编写一些代码来捕获像 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/

相关文章:

rust - 在 Rust 中创建一个切片并附加到它

rust - 如何通过结构内容返回对迭代器的适当生命周期引用?

rust - 如何找到 Linux 主目录的路径?

rust - 由于生命周期/借用错误,文本文件解析函数无法编译

documentation - 如何在文档测试中忽略一行到文档中?

rust - 如何在 Rust 中正确实现 Error::cause?

mongodb - 如何在 Rust 中实现 MongoDB 模式和业务逻辑?

rust - 如何在不看代码的情况下读取生命周期错误?

rust - 解码存储在数据库中的数据

vector - 如何拆箱包含在多态向量中的元素?