From a3ddd88857a4412056b08249a6522b58416f9caa Mon Sep 17 00:00:00 2001 From: T3-WT Date: Wed, 18 Mar 2026 15:19:32 +0100 Subject: [PATCH] Implement async cleanup for Chrome process Added asynchronous handling to reap the main Chrome process to prevent zombie processes. --- backend/server.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend/server.py b/backend/server.py index 99d4aee..f5c4e7e 100644 --- a/backend/server.py +++ b/backend/server.py @@ -328,6 +328,15 @@ async def cleanup_chrome_by_pid(chrome_process, user_data_dir="/tmp", time_at_st proc.kill() # SIGKILL immediately - no waiting except (psutil.NoSuchProcess, psutil.AccessDenied): pass + # Reap the main chrome process to prevent zombies + try: + loop = asyncio.get_event_loop() + await asyncio.wait_for( + loop.run_in_executor(None, chrome_process.wait), + timeout=5.0 + ) + except (asyncio.TimeoutError, Exception) as e: + logger.warning(f"WebSocket ID: {websocket.id} - Error reaping Chrome process: {str(e)}") logger.debug(f"WebSocket ID: {websocket.id} - Chrome PID {chrome_process.pid} cleanup signaled") except (psutil.NoSuchProcess, psutil.AccessDenied, OSError):