如何杀死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 个步骤:
- 输入
htop
- 可选 按
F4
并键入 service_host
以过滤要杀死的进程
- 可选按
F5
将进程排序为树。这将子进程组织为其主进程 ID (PID)
- 滚动列表并突出显示要终止的进程,然后按
F9
选择终止选项
- 突出显示
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。
我是运行一个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 个步骤:
- 输入
htop
- 可选 按
F4
并键入service_host
以过滤要杀死的进程 - 可选按
F5
将进程排序为树。这将子进程组织为其主进程 ID (PID)
- 可选 按
- 滚动列表并突出显示要终止的进程,然后按
F9
选择终止选项 - 突出显示
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。