diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs
index 577036f91683e94f14e642c7e566e5ba60c0d35d..4cd15e7923ca43355996564e3e338abf63b5cb71 100644
--- a/src-tauri/src/cmds.rs
+++ b/src-tauri/src/cmds.rs
@@ -5,7 +5,7 @@ use crate::{
 };
 use serde_yaml::Mapping;
 use std::process::Command;
-use tauri::State;
+use tauri::{api, State};
 
 /// get all profiles from `profiles.yaml`
 /// do not acquire the lock of ProfileLock
@@ -273,6 +273,12 @@ pub async fn patch_verge_config(
   verge.patch_config(payload)
 }
 
+/// kill all sidecars when update app
+#[tauri::command]
+pub fn kill_sidecars() {
+  api::process::kill_children();
+}
+
 /// open app config dir
 #[tauri::command]
 pub fn open_app_dir() -> Result<(), String> {
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 31dcdc8aa8aa73cda3f071c328da783cd026d637..e577ab98920e6133e5250bce97e3858cf71b0955 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -74,6 +74,7 @@ fn main() -> std::io::Result<()> {
       cmds::restart_sidecar,
       cmds::get_sys_proxy,
       cmds::get_cur_proxy,
+      cmds::kill_sidecars,
       cmds::open_app_dir,
       cmds::open_logs_dir,
       // clash
diff --git a/src/components/layout/update-dialog.tsx b/src/components/layout/update-dialog.tsx
index 188114855c4920170a1f5dc91b9233a5d974aba0..3111982b825b09143c36fb0cfe923f14df081831 100644
--- a/src/components/layout/update-dialog.tsx
+++ b/src/components/layout/update-dialog.tsx
@@ -10,6 +10,7 @@ import {
   DialogContentText,
   DialogTitle,
 } from "@mui/material";
+import { killSidecars } from "../../services/cmds";
 
 interface Props {
   open: boolean;
@@ -31,6 +32,7 @@ const UpdateDialog = (props: Props) => {
     try {
       setUploading(true);
       uploadingState = true;
+      await killSidecars();
       await installUpdate();
       await relaunch();
     } catch (error) {
diff --git a/src/services/cmds.ts b/src/services/cmds.ts
index 9ef9c131fef51eff7801349fcfb373c716ef5bd3..b8d9d4ad8cac857b9868b4ec303a6d16f42dc01b 100644
--- a/src/services/cmds.ts
+++ b/src/services/cmds.ts
@@ -64,6 +64,10 @@ export async function getSystemProxy() {
   return invoke<any>("get_sys_proxy");
 }
 
+export async function killSidecars() {
+  return invoke<any>("kill_sidecars");
+}
+
 export async function openAppDir() {
   return invoke<void>("open_app_dir");
 }