cp_microservice/impl/
process_signals.rs

1use log::info;
2use tokio::signal::unix::SignalKind;
3use tokio_util::sync::CancellationToken;
4
5pub fn listen_to_process_signals(cancellation_token: CancellationToken) {
6    tokio::spawn(async move {
7        let mut sigint = match tokio::signal::unix::signal(SignalKind::interrupt()) {
8            Ok(sigint) => sigint,
9            Err(error) => {
10                panic!("failed to listen to SIGINT: {}", error);
11            }
12        };
13
14        let mut sigterm = match tokio::signal::unix::signal(SignalKind::terminate()) {
15            Ok(sigterm) => sigterm,
16            Err(error) => {
17                panic!("failed to listen to SIGTERM: {}", error);
18            }
19        };
20
21        let mut sigquit = match tokio::signal::unix::signal(SignalKind::quit()) {
22            Ok(sigquit) => sigquit,
23            Err(error) => {
24                panic!("failed to listen to SIGQUIT: {}", error);
25            }
26        };
27
28        tokio::select! {
29            _ = sigint.recv() => {
30                info!("received 'sigint' signal");
31                cancellation_token.cancel();
32            }
33            _ = sigterm.recv() => {
34                info!("received 'sigterm' signal");
35                cancellation_token.cancel();
36            }
37            _ = sigquit.recv() => {
38                info!("received 'sigquit' signal");
39                cancellation_token.cancel();
40            }
41        }
42    });
43}