簡體   English   中英

如何殺死 Python 程序的所有進程?

[英]How to kill all processes of a Python program?

我正在運行一個 Python 程序 service_host.py,它啟動了多個進程。 當我使用ps -ef | grep python 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()

是否有可以輕松完成這項工作的終端命令?

Linux 有命令pkill按名稱殺死

pkill python

精確匹配

pkill -e 'python service_host.py'

簽入全名

pkill -f 'service_host.py'

更多man pkill

順便說一句:還有pgrep可以使用名稱獲取 PID。

您已將其標記為“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}'`

管他呢...

使用htop代替,您將能夠使用F4過濾進程service_host ,並使用F5查看整個樹。 從那里你可以用F9一次kill他們...

請遵循以下簡單的 3 個步驟:

  1. 進入htop
    • 可選擇F4並鍵入service_host以過濾要殺死的進程
    • 可選擇F5將進程排序為樹。 這會將子進程組織到其主進程 ID (PID)
  2. 滾動列表並突出顯示要殺死的進程,然后按F9選擇終止選項
  3. 突出顯示15 SIGTERM (信號終止)以優雅地請求停止進程或9 SIGKILL (信號終止)以強制關閉進程並最后按 enter

我通常 go 和9 SIGKILL不用擔心太多,但這取決於你和你在 python 腳本中所做的事情!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM