Ubuntu下Python脚本中psutil无法检测Chrome进程求助
Ubuntu下脚本无法检测Chrome进程的解决方案
以下是针对你遇到的问题的排查方向和解决办法:
核心原因分析
Ubuntu系统中,脚本运行的用户上下文、权限与Python Shell环境可能存在差异,导致无法跨用户或无权限读取Chrome进程信息;另外进程遍历过程中的异常未被处理,也可能导致脚本提前终止或跳过目标进程。
具体解决步骤
1. 权限与用户上下文问题
Chrome通常是当前桌面用户启动的,若脚本以不同用户(比如root或其他用户)运行,默认无法读取其他用户的进程信息。
- 解决办法:
- 用当前桌面用户运行脚本,避免使用
sudo(除非必要); - 若必须用高权限运行,修改代码过滤目标用户的进程,确保只处理指定用户的Chrome进程。
- 用当前桌面用户运行脚本,避免使用
2. 增强进程遍历的鲁棒性
原代码未处理进程访问过程中的异常(如权限不足、进程已结束),可能导致脚本中断或跳过目标进程。
修改后的代码示例
import psutil import time import getpass def kill_processes(): print('Process killing started...') target_user = getpass.getuser() # 获取当前运行脚本的用户,可手动替换为Chrome所属用户名 proc_list = [] # 提前指定要获取的进程属性,提升效率并减少异常 for proc in psutil.process_iter(['name', 'username', 'pid']): try: proc_info = proc.info proc_name = proc_info['name'].lower() proc_user = proc_info['username'] # 匹配目标进程名且属于指定用户 if ("chrome" in proc_name or "uc_driver" in proc_name) and proc_user == target_user: proc_list.append(proc) proc.terminate() print(f"尝试终止进程: {proc_name} (PID: {proc_info['pid']})") time.sleep(1) if proc.is_running(): proc.kill() print(f"强制杀死进程: {proc_name} (PID: {proc_info['pid']})") except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): # 跳过无法访问的进程 continue # 等待进程结束,处理剩余存活进程 gone, alive = psutil.wait_procs(proc_list, timeout=3) for proc in alive: try: proc.kill() print(f"最终强制杀死进程: {proc.info['name'].lower()} (PID: {proc.pid})") except: pass
3. 验证进程名称匹配
若修改后仍无法检测到进程,可在脚本中添加代码打印所有进程名称,确认Chrome的实际进程名:
for proc in psutil.process_iter(['name']): try: print(proc.info['name']) except: pass
运行脚本后搜索输出中的Chrome相关名称,调整代码中的匹配字符串。
4. 环境一致性检查
确保脚本使用的Python环境与Shell中一致:
- 在Shell中执行
which python3获取路径,脚本开头指定该路径(如#!/usr/bin/python3); - 检查虚拟环境,确保脚本运行时激活了与Shell相同的虚拟环境。
内容的提问来源于stack exchange,提问作者Adil Mughal
相关产品推荐
相关产品推荐

