Implement sigterm handler
This avoids situations where the terminal is not reset and still in raw mode.
This commit is contained in:
parent
c9d08421fa
commit
569454dd49
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -1074,6 +1074,7 @@ dependencies = [
|
||||
"lazy_static",
|
||||
"notify",
|
||||
"ratatui",
|
||||
"signal-hook",
|
||||
"tracing",
|
||||
"tracing-appender",
|
||||
"tracing-subscriber",
|
||||
|
@ -12,6 +12,7 @@ lazy_static = "1.4"
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = "0.3"
|
||||
tracing-appender = "0.2"
|
||||
signal-hook = "0.3"
|
||||
|
||||
[dependencies.clap]
|
||||
version = "4.3"
|
||||
|
@ -5,7 +5,9 @@ mod view;
|
||||
|
||||
use std::io::{self, Stdout};
|
||||
use std::path::PathBuf;
|
||||
use std::sync::atomic::{self, AtomicBool};
|
||||
use std::sync::mpsc::{self, TryRecvError};
|
||||
use std::sync::Arc;
|
||||
|
||||
use anyhow::Result;
|
||||
use clap::Parser as ArgParser;
|
||||
@ -98,8 +100,19 @@ pub(crate) fn execute(args: &Args) -> Result<()> {
|
||||
#[cfg_attr(not(feature = "watch"), allow(unused_mut))]
|
||||
fn run(terminal: &mut Terminal, mut state: State) -> Result<()> {
|
||||
let (mut msg_tx, msg_rx) = mpsc::channel::<Message>();
|
||||
let term_signal_received = Arc::new(AtomicBool::new(false));
|
||||
|
||||
signal_hook::flag::register(
|
||||
signal_hook::consts::SIGTERM,
|
||||
Arc::clone(&term_signal_received),
|
||||
)?;
|
||||
|
||||
loop {
|
||||
if term_signal_received.load(atomic::Ordering::Relaxed) {
|
||||
info!("Received termination signal, exiting");
|
||||
break;
|
||||
}
|
||||
|
||||
terminal.draw(|frame| {
|
||||
view::render(&mut state, frame);
|
||||
})?;
|
||||
|
Loading…
Reference in New Issue
Block a user