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
});