Функция ctrl_c
pub async fn ctrl_c() -> Result<()>
signal.Завершает работу, когда процессу отправляется уведомление «ctrl-c».
Обработка сигналов в Unix и Windows существенно различается, однако обе платформы поддерживают получение сигнала «ctrl-c». Эта функция предоставляет переносимый API для получения такого уведомления.
После первого опроса возвращённого future регистрируется обработчик. Future завершится при первом полученном ctrl-c после первоначального вызова Future::poll или .await.
Ограничения
На платформах Unix при первой регистрации экземпляра Signal для определённого типа сигнала устанавливается обработчик сигнала ОС, который заменяет стандартное поведение платформы при получении этого сигнала на всё время работы процесса.
Например, по умолчанию системы 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
});
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/signal/fn.ctrl_c.html