根据名称终止进程?

132 投票
17 回答
285891 浏览
提问于 2025-04-15 23:21

我想结束一个进程(具体来说是iChat)。在命令行里,我使用了这些命令:

ps -A | grep iChat 

然后:

kill -9 PID

不过,我不太确定怎么把这些命令转换成Python代码。

17 个回答

43

如果你想让你的程序在不同的操作系统上都能运行,特别是要考虑到Windows系统的情况,可以试试下面的方法:

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

psutil 是一个可以通过进程名称找到进程并终止它的工具:

import psutil

PROCNAME = "python.exe"

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

假设你在一个类似Unix的系统上(这样就可以使用ps -A命令),

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

这段代码会把ps -A的输出结果存到out这个变量里(它是一个字符串)。你可以把这个字符串分成多行,然后逐行处理...:

>>> 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,不过我个人不太喜欢那样,所以我更倾向于用这种命名常量)。

当然,你可以对这些行进行更复杂的处理,但这段代码的做法和你在命令行中做的很像。

如果你想要避免使用ps命令,那在不同的Unix-like系统上是比较困难的(因为ps是它们获取进程列表的通用接口)。不过,如果你有特定的Unix-like系统在考虑(不需要跨平台兼容),那可能是可行的;特别是在Linux上,/proc这个伪文件系统非常有用。不过在我们能帮你解决这个问题之前,你需要先明确你的具体需求。

撰写回答