根据名称终止进程?
我想结束一个进程(具体来说是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
这个伪文件系统非常有用。不过在我们能帮你解决这个问题之前,你需要先明确你的具体需求。