如何用Python脚本在Linux系统中终止指定应用进程?
Linux下用Python终止指定应用的解决方案
问题分析
你之前用os.system("ps -ef | grep app_name | awk '{print $2}'")的问题在于:
os.system仅返回命令执行状态码,无法获取命令输出的PIDgrep会把自身进程也列入结果,可能导致误操作
解决方案一:使用subprocess模块调用系统命令
这种方式贴近你手动操作的逻辑,同时修正了原代码的问题:
import subprocess import os # 替换为你要终止的应用名称 target_app = "app_name" # 构造命令:过滤掉grep自身进程,只获取目标应用的PID cmd = f"ps -ef | grep {target_app} | grep -v grep | awk '{{print $2}}'" try: # 获取命令输出,转为字符串并去除首尾空白 pid_output = subprocess.check_output(cmd, shell=True, text=True).strip() if not pid_output: print(f"未找到名称包含 {target_app} 的进程") else: # 拆分多个PID(如果有多个实例) pids = pid_output.split('\n') for pid in pids: try: # 发送9号终止信号 os.kill(int(pid), 9) print(f"进程 {pid} 已成功终止") except OSError as err: print(f"终止进程 {pid} 失败: {err}") except subprocess.CalledProcessError: print("获取进程列表时出错")
关键改进点
- 用
subprocess.check_output替代os.system,可以捕获命令的输出结果 - 添加
grep -v grep过滤掉grep自身的进程,避免误杀无关进程 - 将输出的PID字符串转为int类型后,用
os.kill发送终止信号
解决方案二:使用psutil模块(更推荐)
psutil是Python的跨平台进程管理库,无需依赖系统命令,逻辑更清晰可靠:
- 先安装psutil:
pip install psutil
- 编写脚本:
import psutil # 替换为你要终止的应用名称 target_app = "app_name" for process in psutil.process_iter(['name', 'pid']): try: # 匹配进程名称(也可以用process.cmdline()匹配完整命令行) if target_app in process.info['name']: process.kill() print(f"进程 {process.info['pid']} 已成功终止") except (psutil.NoSuchProcess, psutil.AccessDenied): # 忽略已结束的进程或权限不足的情况 continue print(f"已完成对名称包含 {target_app} 的进程终止操作")
优势
- 跨平台兼容,不仅限于Linux
- 无需处理复杂的命令行管道和字符串解析
- 自动处理进程不存在、权限不足等异常情况
内容的提问来源于stack exchange,提问作者Aakash Patel
相关产品推荐
相关产品推荐

