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

如何识别Selenium导致的Firefox浏览器进程泄漏?

爬虫残留Firefox进程排查方案
  • 通过进程树确认父子关联
    使用pstree -p命令以树形结构展示所有进程的层级关系,快速定位每个Firefox进程组的父进程。如果某组Firefox的父进程是你的Python爬虫PID(对应foo1.py至foo8.py的进程ID),即可确定该进程组由对应爬虫启动;父进程为PID 1的则是孤儿进程,大概率是之前崩溃/中断的爬虫遗留的。
    也可使用更简洁的进程列表命令:ps -eo pid,ppid,cmd --forest | grep firefox,同样能清晰看到进程的父子层级。

  • 检查进程环境变量验证关联
    每个进程的环境变量存储着启动时的上下文信息,可通过以下命令查看Firefox进程的环境变量:

    cat /proc/<FIREFOX_PID>/environ | tr '\0' '\n'
    

    替换<FIREFOX_PID>为目标进程ID,输出内容中如果包含爬虫脚本的路径、自定义配置变量等特征信息,即可确认该Firefox进程与爬虫的关联关系。

  • 对比启动时间锁定关联进程
    分别查看Firefox进程和爬虫进程的启动时间,通过时间匹配判断关联:
    查看Firefox进程启动时间:

    ps -eo pid,lstart,cmd | grep firefox
    

    查看爬虫进程启动时间:

    ps -eo pid,lstart,cmd | grep -E "foo[1-8].py"
    

    若某组Firefox的启动时间与某个爬虫进程的启动时间接近,基本可以确定该进程组由该爬虫启动。

  • 清理残留进程的实操方法

    • 对于父进程为爬虫PID的Firefox进程组,直接杀掉父进程组即可一次性清理所有关联子进程:
      kill -TERM -<爬虫PPID>
      
      若进程无响应,改用强制终止:
      kill -9 -<爬虫PPID>
      
      (注意PPID前的减号,表示终止整个进程组)
    • 对于父进程为PID 1的孤儿进程,直接杀掉Firefox主进程即可,其子进程会被系统自动回收:
      kill -TERM <Firefox主进程PID>
      
  • 后续预防残留的建议

    • 在爬虫脚本中完善异常捕获逻辑,确保即使脚本崩溃/中断,也能调用浏览器的完整退出接口(比如Selenium中使用driver.quit()而非driver.close(),前者会终止整个浏览器进程,后者仅关闭当前标签页)。
    • 若通过subprocess启动浏览器,设置start_new_session=False,让浏览器进程成为爬虫的子进程,确保爬虫退出时系统能自动回收相关子进程。

内容的提问来源于stack exchange,提问作者Ray Kiddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:39:22