在linux(Python)中使用其名称杀死进程

时间:2009-10-22 23:34:50

标签: python linux unix process

这有效,但它会杀死每个Python进程。

pkill python

然而,我不能这样做:

pkill myscript.py

我也尝试了 killall ,但也没有运气。 我是否必须使用正则表达式?

顺便说一句,我想在一个带有 import os的python脚本中这样做。

5 个答案:

答案 0 :(得分:5)

您是否从同一个脚本中启动了Python子流程?如果是,请参阅this question了解详情。如果没有,您可以使用pkill的-f选项在Python进程的参数列表中搜索脚本名称,但仍然存在杀死您不想要的内容的风险。有关详细信息,请参阅man page

答案 1 :(得分:2)

您是否可以让流程将pid写入文件? 在Python中你得到这样的pid:

import os
os.getpid()

按名称杀人很方便,但有时会产生不良后果,如你所见。

答案 2 :(得分:2)

sudo kill -9 `pgrep python`

此命令将终止所有正在运行的python进程

答案 3 :(得分:0)

您需要查找进程ID(pid)。您可以使用命令“ps -A | grep NAME”,然后应用“kill -9 PID”。这些命令可以很容易地转换为python。

尝试使用“名称”(如在pkill中)可以产生多个匹配,从而产生意外结果(至少在问题上方设置的上下文中)。

答案 4 :(得分:-1)

试试这个:

echo '#!/usr/bin/env python' > myscript
cat myscript.py >>myscript
chmod +x myscript
./myscript

当然,您必须更改代码以终止名为“myscript”的进程 在UNIX系统上,可执行文件在开头包含几个字节,告诉操作系统正在使用哪种二进制格式。如果前两个字节是#!,则操作系统假定这实际上是一个文本文件,可以由另一个程序执行,操作系统加载另一个程序并传递给它,即文本文件。

在这种情况下,我可能在顶行写了#!/usr/bin/python,但是如果你的python在/usr/local/bin,那么它就行不通了。相反,我利用env来搜索python的正常路径。所有UNIX系统都在/ usr / bin中有env。有关详细信息,您可以输入man env