Python程序关闭后如何杀死关联selenium/chromedriver进程且不影响其他Chrome?
如何在Python应用退出时精准清理对应chromedriver进程
核心逻辑是只清理当前程序关联的chromedriver进程,避免全局匹配导致误伤其他Chrome进程,提供两种可直接落地的方案:
方案1:启动时记录进程PID,退出时精准清理(优先推荐)
启动chromedriver时直接记录对应进程ID,程序退出时遍历PID列表逐个清理,不会有任何误伤风险,示例代码如下:
from selenium import webdriver import atexit import os import signal # 存储当前程序启动的所有chromedriver进程ID driver_pid_list = [] # 注册程序退出回调,正常/异常退出时都会自动执行清理 def clean_up_chromedriver(): for pid in driver_pid_list: try: os.kill(pid, signal.SIGTERM) except OSError: # 进程已提前退出的情况直接忽略 pass atexit.register(clean_up_chromedriver) # 每次启动chromedriver时,记录对应PID driver = webdriver.Chrome() driver_pid_list.append(driver.service.process.pid) # 你的业务逻辑代码 # ... # 正常调用quit也可关闭,就算漏写,退出回调也会兜底清理 driver.quit()
方案2:通过父进程ID匹配清理
如果场景特殊无法提前记录PID(比如第三方库内部启动chromedriver、多进程部署等),可以通过匹配「进程名为chromedriver、父进程为当前Python进程」的规则清理,示例代码如下:
首先安装依赖:pip install psutil
清理逻辑代码:
import atexit import os import signal import psutil def clean_up_child_chromedriver(): current_python_pid = os.getpid() for proc in psutil.process_iter(['name', 'ppid', 'pid']): try: # 仅匹配当前Python进程启动的chromedriver子进程 if proc.info['name'] in ('chromedriver', 'chromedriver.exe') and proc.info['ppid'] == current_python_pid: os.kill(proc.info['pid'], signal.SIGTERM) except (psutil.NoSuchProcess, psutil.AccessDenied, OSError): # 无权限、进程已退出的情况直接忽略 pass # 注册到退出回调自动执行 atexit.register(clean_up_child_chromedriver)
其他说明
- chromedriver进程被杀死后,它启动的对应Chrome子进程会自动退出,不需要额外处理Chrome进程
- 多进程场景下使用方案2时,需要将匹配逻辑放到启动chromedriver的子进程内,或遍历当前Python进程的所有子孙进程进行匹配
内容的提问来源于stack exchange,提问作者darksideofpython123
相关产品推荐
相关产品推荐

