diff --git a/gradio_ui.py b/gradio_ui.py index e4d07c2..9182cb7 100644 --- a/gradio_ui.py +++ b/gradio_ui.py @@ -100,26 +100,21 @@ def run_eval( def stop_eval(): global current_process, should_stop should_stop = True - killed = [] - try: - for proc in psutil.process_iter(["pid", "name", "cmdline"]): - try: - cmdline = proc.info["cmdline"] - if cmdline and "evalscope" in " ".join(cmdline): - killed.append(proc.pid) - proc.kill() - except (psutil.NoSuchProcess, psutil.AccessDenied): - continue - - if killed: + if current_process and current_process.poll() is None: + try: + pgid = os.getpgid(current_process.pid) + os.killpg(pgid, signal.SIGINT) # ✅ 优雅终止 + time.sleep(2) + if current_process.poll() is None: + os.killpg(pgid, signal.SIGKILL) # ❗ 强制终止 + return "[✅ 已发送终止信号 (SIGINT → SIGKILL fallback)]\n" + except Exception as e: + return f"[❌ 终止失败: {e}]\n" + finally: current_process = None - return f"[✅ 强制终止 evalscope PIDs: {killed}]\n" - else: - return "[⚠️ 未发现可杀的 evalscope 进程]\n" - - except Exception as e: - return f"[❌ 停止失败: {e}]\n" + else: + return "[⚠️ 无活动 evalscope 进程]\n"