From d3cf91c5d33a7c7220a0f8ca0f944047dcd600f8 Mon Sep 17 00:00:00 2001 From: zhom <2717306+zhom@users.noreply.github.com> Date: Thu, 11 Dec 2025 22:57:02 +0400 Subject: [PATCH] refactor: verify dead process on force kill --- src-tauri/src/browser_runner.rs | 45 ++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/browser_runner.rs b/src-tauri/src/browser_runner.rs index 5bc2342..b08cd00 100644 --- a/src-tauri/src/browser_runner.rs +++ b/src-tauri/src/browser_runner.rs @@ -1019,7 +1019,20 @@ impl BrowserRunner { { log::error!("Failed to force kill Camoufox process {}: {}", pid, e); } else { - process_actually_stopped = true; + // Verify the process is actually dead after force kill + use tokio::time::{sleep, Duration}; + sleep(Duration::from_millis(500)).await; + use sysinfo::{Pid, System}; + let system = System::new_all(); + process_actually_stopped = + system.process(Pid::from(pid as usize)).is_none(); + if process_actually_stopped { + log::info!( + "Successfully force killed Camoufox process {} (PID: {:?})", + camoufox_process.id, + pid + ); + } } } #[cfg(target_os = "linux")] @@ -1029,7 +1042,20 @@ impl BrowserRunner { { log::error!("Failed to force kill Camoufox process {}: {}", pid, e); } else { - process_actually_stopped = true; + // Verify the process is actually dead after force kill + use tokio::time::{sleep, Duration}; + sleep(Duration::from_millis(500)).await; + use sysinfo::{Pid, System}; + let system = System::new_all(); + process_actually_stopped = + system.process(Pid::from(pid as usize)).is_none(); + if process_actually_stopped { + log::info!( + "Successfully force killed Camoufox process {} (PID: {:?})", + camoufox_process.id, + pid + ); + } } } #[cfg(target_os = "windows")] @@ -1040,7 +1066,20 @@ impl BrowserRunner { { log::error!("Failed to force kill Camoufox process {}: {}", pid, e); } else { - process_actually_stopped = true; + // Verify the process is actually dead after force kill + use tokio::time::{sleep, Duration}; + sleep(Duration::from_millis(500)).await; + use sysinfo::{Pid, System}; + let system = System::new_all(); + process_actually_stopped = + system.process(Pid::from(pid as usize)).is_none(); + if process_actually_stopped { + log::info!( + "Successfully force killed Camoufox process {} (PID: {:?})", + camoufox_process.id, + pid + ); + } } } }