You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:06:06