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",
|
"lazy_static",
|
||||||
"notify",
|
"notify",
|
||||||
"ratatui",
|
"ratatui",
|
||||||
|
"signal-hook",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-appender",
|
"tracing-appender",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
|
@ -12,6 +12,7 @@ lazy_static = "1.4"
|
|||||||
tracing = "0.1"
|
tracing = "0.1"
|
||||||
tracing-subscriber = "0.3"
|
tracing-subscriber = "0.3"
|
||||||
tracing-appender = "0.2"
|
tracing-appender = "0.2"
|
||||||
|
signal-hook = "0.3"
|
||||||
|
|
||||||
[dependencies.clap]
|
[dependencies.clap]
|
||||||
version = "4.3"
|
version = "4.3"
|
||||||
|
@ -5,7 +5,9 @@ mod view;
|
|||||||
|
|
||||||
use std::io::{self, Stdout};
|
use std::io::{self, Stdout};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use std::sync::atomic::{self, AtomicBool};
|
||||||
use std::sync::mpsc::{self, TryRecvError};
|
use std::sync::mpsc::{self, TryRecvError};
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::Parser as ArgParser;
|
use clap::Parser as ArgParser;
|
||||||
@ -98,8 +100,19 @@ pub(crate) fn execute(args: &Args) -> Result<()> {
|
|||||||
#[cfg_attr(not(feature = "watch"), allow(unused_mut))]
|
#[cfg_attr(not(feature = "watch"), allow(unused_mut))]
|
||||||
fn run(terminal: &mut Terminal, mut state: State) -> Result<()> {
|
fn run(terminal: &mut Terminal, mut state: State) -> Result<()> {
|
||||||
let (mut msg_tx, msg_rx) = mpsc::channel::<Message>();
|
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 {
|
loop {
|
||||||
|
if term_signal_received.load(atomic::Ordering::Relaxed) {
|
||||||
|
info!("Received termination signal, exiting");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
terminal.draw(|frame| {
|
terminal.draw(|frame| {
|
||||||
view::render(&mut state, frame);
|
view::render(&mut state, frame);
|
||||||
})?;
|
})?;
|
||||||
|
Loading…
Reference in New Issue
Block a user