cp_microservice/impl/
process_signals.rs1use 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}