You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中通过进程名称终止进程?

通过进程名称终止multiprocessing进程是否可行?

当然可以实现!不过Python自带的multiprocessing模块本身并没有直接提供“按名称终止进程”的现成方法,需要我们自己写点逻辑来完成这个需求,分两种场景来说:

场景1:在创建进程的同一个主进程中终止

如果是在启动进程的同一个脚本/主进程里操作,事情就很简单:我们可以用Process.active_children()方法获取当前主进程下所有活跃的子进程,然后遍历匹配进程名称,找到后调用terminate()终止它。

比如给你的代码加上终止逻辑:

from multiprocessing import Process
import time

def f(name):
    print('hello ', name)
    time.sleep(30)  # 让进程保持运行,方便测试终止操作

if __name__ == '__main__':
    p = Process(target=f, name="Process-1", args=('bob',))
    p.start()

    # 定义按名称终止进程的函数
    def kill_process_by_name(target_name):
        # 遍历所有活跃子进程
        for proc in Process.active_children():
            if proc.name == target_name:
                print(f"找到并终止进程: {proc.name} (PID: {proc.pid})")
                proc.terminate()
                proc.join()  # 等待进程彻底结束,避免僵尸进程

    # 调用函数终止指定名称的进程
    kill_process_by_name("Process-1")

这里要注意两个细节:

  • active_children()只会返回当前主进程创建的子进程,不会涉及系统中其他无关进程
  • 调用terminate()后记得调用join(),确保进程资源被正确释放

如果有多个同名进程,这个函数会把所有匹配名称的进程都终止掉,要是只想终止特定的一个,可以结合PID或者其他自定义标识来精准匹配。

场景2:跨进程/跨脚本终止

如果是在另一个脚本或者完全独立的进程里想终止目标进程,上面的方法就没用了——因为active_children()只能获取当前进程的子进程。这时候可以借助第三方库psutil来遍历系统中的所有进程,通过进程名称(或者更精准的命令行参数)来定位并终止。

首先安装psutil

pip install psutil

然后写终止逻辑:

import psutil

def kill_process_by_name(target_name):
    # 遍历系统中所有进程
    for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
        try:
            # 这里可以根据实际情况调整匹配规则:
            # 比如如果你的进程名称是"Process-1",但psutl返回的进程名可能是python/python3
            # 所以更可靠的是匹配命令行参数里的进程名称
            cmdline = ' '.join(proc.info['cmdline']) if proc.info['cmdline'] else ''
            if target_name in cmdline:
                print(f"找到目标进程,PID: {proc.pid},正在终止...")
                proc.terminate()
                proc.wait()  # 等待进程终止完成
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            # 处理进程不存在或者无权限的情况
            continue

这种方法可以跨进程查找,但需要注意:

  • 要有足够的权限终止目标进程(比如Windows下可能需要管理员权限,Linux下可能需要sudo)
  • 匹配规则要尽量精准,避免误杀其他同名进程

内容的提问来源于stack exchange,提问作者Kon Kyri

火山引擎 最新活动