跳到主要内容

ctrl_c

搜索

函数 ctrl_c 

Source
pub async fn ctrl_c() -> Result<()>
展开描述

当进程接到 “ctrl-c” 通知时完成。

虽然 Unix 和 Windows 对信号的处理方式差异很多, 但两个平台都支持接收 “ctrl-c” 信号。本函数提供了可移植的 API 用于接收该通知。

一旦调用返回的 future,则会注册一个监听器。该 future 将在首次调用 Future::poll.await 之后 接到的第一个 ctrl-c 通知时完成。

§Caveats

在 Unix 平台上,当为某个具体的信号类型注册第一个 Signal 实例时, 会安装一个 OS 信号处理函数,它会在接到该信号时 替换平台默认行为,超出信号处理器的生命周期

例如,Unix 系统默认情况下在终端接到 "CTRL+C" 产生的信号时终止进程。 但当创建 ctrl_c 流监听此信号时,在其接收到时, 信号会被转换为流事件,进程会继续执行。 即使掉弃该 Signal 实例,后续的 SIGINT 信号会被 Tokio 捕获,且平台默认的行为将不会被重置

因此,应用程序应该谨慎处理,确保监听其他特定信号后行为如预期。

§示例

use tokio::signal;

#[tokio::main]
async fn main() {
    println!("waiting for ctrl-c");

    signal::ctrl_c().await.expect("failed to listen for event");

    println!("received ctrl-c event");
}

在后台监听:

tokio::spawn(async move {
    tokio::signal::ctrl_c().await.unwrap();
    // Your handler here
});