按名称杀死进程?
问题内容:
我正在尝试终止一个进程(特别是iChat)。在命令行上,我使用以下命令:
ps -A | grep iChat
然后:
kill -9 PID
但是,我不确定如何将这些命令转换为Python。
问题答案:
假设您使用的是类似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
,但是我并不特别喜欢这种样式,所以我宁愿以这种方式使用命名常量)。
当然,您可以在这些行上执行更复杂的处理,但这模仿了您在Shell中所做的事情。
如果您想要避免ps
的事情,那么在不同的类似Unix的系统上就很难做到(ps
从某种意义上说,这是它们的通用API来获取进程列表)。但是,如果只考虑特定的类Unix系统(不需要任何跨平台可移植性),则可能是可行的。特别是在Linux上,/proc
伪文件系统非常有用。但是,在我们为后一部分提供帮助之前,您需要澄清您的确切要求。