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

Python原生实现pkill -f按进程名杀进程无需subprocess或第三方依赖

实现方案

你使用的是Linux(Ubuntu 18.04)系统,可直接通过读取系统原生的/proc进程文件系统实现需求,全程只用到Python标准库,无需调用subprocess也无需安装第三方依赖,逻辑和pkill -f完全一致:匹配进程完整启动命令行的子串,命中后终止进程。

完整代码实现
import os
import signal

def pkill_f(pattern: str, sig: int = signal.SIGTERM) -> None:
    """
    实现和pkill -f等价的功能:匹配命令行包含指定子串的进程,发送指定信号
    :param pattern: 要匹配的命令行子串
    :param sig: 要发送的信号,默认SIGTERM(等价pkill默认行为),可传signal.SIGKILL强制终止
    """
    # 遍历/proc下的所有条目,筛选出PID对应的数字命名目录
    for entry in os.listdir('/proc'):
        if not entry.isdigit():
            continue
        pid = int(entry)
        try:
            # 读取进程的完整启动命令行,cmdline中参数用\x00分隔
            with open(f'/proc/{pid}/cmdline', 'r') as f:
                cmdline = f.read().replace('\x00', ' ').strip()
            # 子串匹配,和pkill -f逻辑一致
            # 如需避免终止当前Python脚本自身,可追加 and pid != os.getpid() 条件
            if pattern in cmdline:
                os.kill(pid, sig)
        # 跳过遍历过程中已退出的进程、无权限访问的进程
        except (ProcessLookupError, PermissionError, FileNotFoundError):
            continue
使用示例

要终止所有命令行包含process_name的进程,直接调用即可:

pkill_f("process_name")

如果需要强制杀进程(等价pkill -9 -f process_name),可以传SIGKILL信号:

pkill_f("process_name", sig=signal.SIGKILL)
注意事项
  • 该方案仅适用于Linux系统,刚好匹配你的Ubuntu 18.04运行环境
  • 仅能终止当前执行Python脚本的用户有权限操作的进程,和pkill的权限逻辑完全一致
  • 匹配逻辑和pkill -f完全相同,是对进程的完整启动命令行做子串匹配,而非仅匹配进程名

内容的提问来源于stack exchange,提问作者Pranjal Doshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:02