如何在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




