如何杀死Python程序的所有进程?

2024-06-08 10:03:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个Python程序服务_host.py,它启动了多个进程。当我使用ps -ef | grep python

为了检查pids,它显示了很多信息:

congmin  26968 22897  0 Jun20 ?        00:00:00 python service_host.py
congmin  26969 22897  0 Jun20 ?        00:00:00 python service_host.py
congmin  26970 22897  0 Jun20 ?        00:00:00 python service_host.py
congmin  26971 22897  0 Jun20 ?        00:00:00 python service_host.py
congmin  26972 22897  0 Jun20 ?        00:00:00 python service_host.py
congmin  26973 22897  0 Jun20 ?        00:00:00 python service_host.py
congmin  26974 22897  0 Jun20 ?        00:00:00 python service_host.py
congmin  26975 22897  0 Jun20 ?        00:00:00 python service_host.py

一次杀死所有这些进程的最佳方法是什么?我在Linux上,不想通过进程ID逐个杀死它们。有没有办法通过Python名称“service_host.py”杀死它们?我试过了,但一点都没死:

import psutil

PROCNAME = "service_host.py"

for proc in psutil.process_iter():
    # check whether the process name matches
    if proc.name() == PROCNAME:
        proc.kill()

是否有一个终端命令可以轻松完成这项工作


Tags: namepy程序host进程serviceprocprocess
3条回答

Linux有命令pkill按名称终止

pkill python

精确匹配

pkill -e 'python service_host.py'

全名登记

pkill -f 'service_host.py'

更多信息请访问man pkill

顺便说一句:还有pgrep可以使用名称获取PID

改用^{},您将能够用F4过滤进程service_host,并用F5查看整个树。从那里你可以kill使用F9一次将它们全部删除

遵循以下3个简单步骤:

  1. 输入htop
    • 可选地F4并键入service_host以过滤要终止的进程
    • (可选)F5将进程作为树进行排序。这会将子进程组织到其主进程ID(PID)
  2. 滚动列表并突出显示要终止的进程,然后按F9以获取终止选项
  3. 突出显示15 SIGTERM(信号终止)以优雅地请求停止进程,或突出显示9 SIGKILL(信号终止)以强制关闭进程,最后按enter键

我通常使用9 SIGKILL而不用太担心,但这取决于您和您在python脚本中所做的事情

您已经用“python”标记了它,并且您的脚本几乎做对了,因此这里有一个固定版本的脚本使用cmdline方法将命令行提取为列表:

import psutil

PROCNAME = "service_host.py"

for proc in psutil.process_iter():
    # check whether the process name matches
    cmdline = proc.cmdline()
    if len(cmdline) >= 2 and "python" in cmdline[0] and cmdline[1] == PROCNAME:
        # print(proc)
        proc.kill()

虽然Linux命令行中的各种可能性当然是可能的

kill `ps -ef | grep "python service_host.py" | grep -v grep | awk '{print $2}'`

或者别的什么

相关问题 更多 >