Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Commit

Permalink
run command now kills child process on SIGTERM to cleanly exit (#4896) (
Browse files Browse the repository at this point in the history
#4899)

automerge
  • Loading branch information
mvines authored and solana-grimes committed Jul 2, 2019
1 parent 60c5e59 commit 4866a1f
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 2 deletions.
27 changes: 27 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions install/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ solana-client = { path = "../client", version = "0.16.2" }
solana-config-api = { path = "../programs/config_api", version = "0.16.2" }
solana-logger = { path = "../logger", version = "0.16.2" }
solana-sdk = { path = "../sdk", version = "0.16.2" }
signal-hook = "0.1.9"
tar = "0.4.26"
tempdir = "0.3.7"
url = "1.7.2"
Expand Down
26 changes: 24 additions & 2 deletions install/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use solana_sdk::transaction::Transaction;
use std::fs::{self, File};
use std::io::{self, BufReader, Read};
use std::path::{Path, PathBuf};
use std::thread::sleep;
use std::sync::mpsc;
use std::time::SystemTime;
use std::time::{Duration, Instant};
use tempdir::TempDir;
Expand Down Expand Up @@ -759,6 +759,19 @@ pub fn run(

let mut child_option: Option<std::process::Child> = None;
let mut now = Instant::now();

let (signal_sender, signal_receiver) = mpsc::channel();
if !cfg!(windows) {
use signal_hook::{iterator::Signals, SIGTERM};
let signals = Signals::new(&[SIGTERM]).unwrap();
std::thread::spawn(move || {
for sig in signals.forever() {
eprintln!("run: received signal {:?}", sig);
let _ = signal_sender.send(());
}
});
}

loop {
child_option = match child_option {
Some(mut child) => match child.try_wait() {
Expand Down Expand Up @@ -806,6 +819,15 @@ pub fn run(
};
now = Instant::now();
}
sleep(Duration::from_secs(1));

if let Ok(()) = signal_receiver.recv_timeout(Duration::from_secs(1)) {
// Handle SIGTERM...
if let Some(ref mut child) = child_option {
stop_process(child).unwrap_or_else(|err| {
eprintln!("Failed to stop child: {:?}", err);
});
}
std::process::exit(0);
}
}
}

0 comments on commit 4866a1f

Please sign in to comment.