diff --git a/src/plugins/video/mod.rs b/src/plugins/video/mod.rs index 0c4f745..0bab18f 100644 --- a/src/plugins/video/mod.rs +++ b/src/plugins/video/mod.rs @@ -214,6 +214,10 @@ impl Plugin for VideoPlugin { let _ = child.kill(); let _ = child.wait(); } + let _ = std::process::Command::new("pkill") + .arg("-f") + .arg("live2d-display.html") + .output(); // 启动 Firefox kiosk 模式全屏显示 Live2D let port = config.remote_control.port; let url = format!("http://localhost:{port}/live2d-display.html"); @@ -242,8 +246,13 @@ impl Plugin for VideoPlugin { if let Some(mut child) = self.live2d_child.take() { let _ = child.kill(); let _ = child.wait(); - println!("[VideoPlugin] 切回视频模式:Firefox kiosk 已关闭"); } + // Firefox 会 fork 子进程,child.kill() 只杀父进程,用 pkill 兜底 + let _ = std::process::Command::new("pkill") + .arg("-f") + .arg("live2d-display.html") + .output(); + println!("[VideoPlugin] 切回视频模式:Firefox kiosk 已关闭"); let processor = Arc::new(Mutex::new(VideoProcessor::new(config)?)); if let Some(old) = self.processor.replace(Arc::clone(&processor)) { @@ -295,6 +304,10 @@ impl Plugin for VideoPlugin { let _ = child.kill(); let _ = child.wait(); } + let _ = std::process::Command::new("pkill") + .arg("-f") + .arg("live2d-display.html") + .output(); self.publish_status(); Ok(())