按名称杀死进程?

Aar*_*ron 84 python kill process

我正试图杀死一个进程(特别是iChat).在命令行中,我使用以下命令:

ps -A | grep iChat 
Run Code Online (Sandbox Code Playgroud)

然后:

kill -9 PID
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何将这些命令转换为Python.

Gia*_*olà 176

psutil可以按名称查找进程并将其杀死:

import psutil

PROCNAME = "python.exe"

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

  • 这个.因为它是**跨平台**. (47认同)
  • 这样做的缺点是它需要`psutil`包,它可能不存在于目标机器上. (11认同)
  • "pip install psutil"将正常工作,因为它将检索pypi上的滚轮版本.不,你不需要编译器. (5认同)
  • 或者如果你想通过命令行,如:proc.cmdline中的"your_python_script.py":.. kill (2认同)

Ale*_*lli 78

假设你是一个类Unix的平台(这样ps -A存在),

>>> import subprocess, signal
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
Run Code Online (Sandbox Code Playgroud)

给出变量(字符串)中ps -A的输出out.你可以将它分解成行并循环它们......:

>>> for line in out.splitlines():
...   if 'iChat' in line:
...     pid = int(line.split(None, 1)[0])
...     os.kill(pid, signal.SIGKILL)
... 
Run Code Online (Sandbox Code Playgroud)

(你可以避免导入signal,而9不是使用signal.SIGKILL,但我只是不喜欢那种风格,所以我宁愿用这种方式使用命名常量).

当然,您可以在这些线上进行更复杂的处理,但这模仿了您在shell中所做的事情.

如果您所追求的是避免ps,那么在不同的类Unix系统中很难做到(ps在某种意义上,它们是获取进程列表的常用API).但是如果你有一个特定的类Unix系统,只有(不需要任何跨平台的可移植性),它可能是可能的; 特别是在Linux上,/proc伪文件系统非常有用.但是,在我们可以帮助后一部分之前,您需要澄清您的确切要求.


lim*_*ker 35

如果您必须考虑Windows案例才能跨平台,请尝试以下方法:

os.system('taskkill /f /im exampleProcess.exe')
Run Code Online (Sandbox Code Playgroud)


Mat*_*hen 22

如果你有killall:

os.system("killall -9 iChat");
Run Code Online (Sandbox Code Playgroud)

要么:

os.system("ps -C iChat -o pid=|xargs kill -9")
Run Code Online (Sandbox Code Playgroud)

  • 还有'pkill`,虽然我认为我是世界上唯一使用它而不是`killall`的人 (8认同)

小智 7

这在Windows 7中为我工作

import subprocess
subprocess.call("taskkill /IM geckodriver.exe")
Run Code Online (Sandbox Code Playgroud)


Bak*_*sra 5

你可以试试这个。但在您需要使用安装psutil之前sudo pip install psutil

import psutil
for proc in psutil.process_iter(attrs=['pid', 'name']):
    if 'ichat' in proc.info['name']:
        proc.kill()
Run Code Online (Sandbox Code Playgroud)