Python for循环中调用os.system执行taskkill第二次无法关闭Chrome
问题原因
- 核心问题出在
webbrowser模块的调用逻辑和Chrome的默认后台驻留机制:- 首次循环时系统没有运行的Chrome进程,调用
webbrowser.get().open_new()会启动新的Chrome主进程,taskkill可以正常杀掉所有进程 - Chrome默认开启「关闭后继续运行后台应用」设置,首次杀进程后会残留轻量后台进程,第二次调用
webbrowser方法时不会启动新进程,只会给残留进程发消息打开新标签,此时taskkill会因为进程状态、权限关联问题无法正常结束残留进程 - 你当前用的
taskkill /im chrome.exe是全量杀所有Chrome进程,如果用户本身开了其他Chrome窗口也会被误杀,进一步导致进程状态混乱
- 首次循环时系统没有运行的Chrome进程,调用
修复方案
推荐改用subprocess模块直接启动Chrome进程,拿到进程实例后精准杀死你启动的这个进程,完全避免残留进程和误杀问题,还可以加启动参数避免Chrome弹出崩溃恢复提示:
import subprocess import time url = '<url>' chrome_path = 'C:/Program Files/Google/Chrome/Application/chrome.exe' # 启动参数说明:禁用会话恢复、禁用首次运行引导、启动独立窗口 chrome_args = [chrome_path, '--disable-restore-session-state', '--no-first-run', '--new-window', url] for i in range(3): # 启动Chrome进程,拿到进程对象 chrome_proc = subprocess.Popen(chrome_args) time.sleep(10) # 精准杀死本次启动的Chrome进程,不会影响其他已有的Chrome窗口 chrome_proc.kill() # 等待进程资源回收 chrome_proc.wait() time.sleep(10)
如果要继续使用原逻辑,需要先手动关闭Chrome的后台驻留设置:打开Chrome设置 → 系统 → 关闭「关闭 Google Chrome 后继续运行后台应用」选项,同时在open_new前先执行一次杀残留Chrome进程的操作即可。
内容的提问来源于stack exchange,提问作者Fish1996
相关产品推荐
相关产品推荐

