From b83c69f002d54071e2e4570eb2bfc96887401cc3 Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Sun, 25 Jan 2026 11:03:16 +0000 Subject: [PATCH] chore(shutdown): log CLI kill timeout Log when Electron/Tauri force-kill the CLI during shutdown so orphaned instance reports are easier to diagnose. --- packages/electron-app/electron/main/process-manager.ts | 3 +++ packages/tauri-app/src-tauri/src/cli_manager.rs | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/packages/electron-app/electron/main/process-manager.ts b/packages/electron-app/electron/main/process-manager.ts index a614676a..80cbd71e 100644 --- a/packages/electron-app/electron/main/process-manager.ts +++ b/packages/electron-app/electron/main/process-manager.ts @@ -177,6 +177,9 @@ export class CliProcessManager extends EventEmitter { return new Promise((resolve) => { const killTimeout = setTimeout(() => { + console.warn( + `[cli] stop timed out after 30000ms; sending SIGKILL (pid=${child.pid ?? "unknown"})`, + ) child.kill("SIGKILL") }, 30000) diff --git a/packages/tauri-app/src-tauri/src/cli_manager.rs b/packages/tauri-app/src-tauri/src/cli_manager.rs index f0ea6938..a1b8013a 100644 --- a/packages/tauri-app/src-tauri/src/cli_manager.rs +++ b/packages/tauri-app/src-tauri/src/cli_manager.rs @@ -278,6 +278,7 @@ impl CliProcessManager { pub fn stop(&self) -> anyhow::Result<()> { let mut child_opt = self.child.lock(); if let Some(mut child) = child_opt.take() { + log_line(&format!("stopping CLI pid={}", child.id())); #[cfg(unix)] unsafe { libc::kill(child.id() as i32, libc::SIGTERM); @@ -293,6 +294,11 @@ impl CliProcessManager { Ok(Some(_)) => break, Ok(None) => { if start.elapsed() > Duration::from_secs(CLI_STOP_GRACE_SECS) { + log_line(&format!( + "stop timed out after {}s; sending SIGKILL pid={}", + CLI_STOP_GRACE_SECS, + child.id() + )); #[cfg(unix)] unsafe { libc::kill(child.id() as i32, libc::SIGKILL);