假设您使用的是类似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伪文件系统非常有用。但是,在我们为后一部分提供帮助之前,您需要澄清您的确切要求。



