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

How to kill all processes of a Python program?

我是运行一个Python程序service_host.py,启动了多个进程。当我使用 ps -ef | grep python

查看pid,显示很多:

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()

有没有可以轻松完成这项工作的终端命令?

使用 htop,您将能够使用 F4 过滤进程 service_host,并使用 F5 查看整个树。从那里你可以 kill 他们一次 F9 ...

遵循这些简单的 3 个步骤:

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

我通常会选择 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 }'`

或其他...

Linux 有命令 pkill 按名字杀死

pkill python

精确匹配

pkill -e 'python service_host.py'

签入全名

pkill -f 'service_host.py'

man pkill

中的更多内容

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