按名称终止进程?

2024-04-26 22:44:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图终止一个进程(特别是iChat)。在命令行中,我使用以下命令:

ps -A | grep iChat 

然后:

kill -9 PID

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


Tags: 命令行命令进程pidgreppskillichat
3条回答

假设您在一个类Unix的平台上(因此ps -A存在)

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

out变量(字符串)中为您提供ps -A的输出。你可以把它分成几行,然后在上面循环…:

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

(您可以避免导入signal,并使用9,而不是signal.SIGKILL,但我不太喜欢这种样式,所以我宁愿这样使用命名常量)。

当然,您可以在这些行上执行更复杂的处理,但这模拟了您在shell中所做的操作。

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

如果为了跨平台而必须考虑Windows情况,请尝试以下操作:

os.system('taskkill /f /im exampleProcess.exe')

psutil可以按名称查找进程并终止它:

import psutil

PROCNAME = "python.exe"

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

相关问题 更多 >