如何在Python中查找Unix进程
我想知道'ps'命令的输出中是否包含进程'smtpd'。问题是,不同的busybox需要不同的ps命令!有的需要'ps x',有的需要'ps w',还有的只需要'ps'。
我该如何设计一个通用的算法,尝试所有可能的'ps'命令呢?
例如:
linex=''
foo=os.popen('ps')
for x in foo.readlines():
if x.lower().find('smtpd') != -1:
// SOME SCRIPT STUFF on linex string...
return linex
linex=''
foo=os.popen('ps w')
for x in foo.readlines():
if x.lower().find('smtpd') != -1:
// SOME SCRIPT STUFF on linex string...
return linex
linex=''
foo=os.popen('ps x')
for x in foo.readlines():
if x.lower().find('smtpd') != -1:
// SOME SCRIPT STUFF on linex string...
return linex
2 个回答
0
def find_sys_cmds(needle,cmd,options):
for opt in options:
for line in os.popen("%s %s"%(cmd,opt)).readlines():
if needle in line.lower():
return line
print find_sys_cmds("smtpd","ps",["","x","w","aux",..."])
def find_sys_cmds(needle,cmd,options):
for opt in options:
for line in os.popen("%s %s"%(cmd,opt)).readlines():
if needle in line.lower():
yield line
for line in find_sys_cmds("smtpd","ps",["","x","w","aux",..."]):
print line
这是你可以这样做的一种方法。
如果你可能有多个匹配的进程。
1
看看这个:
/proc是你找到所需信息的正确地方
import os
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
for pid in pids:
try:
cmd = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read()
if cmd.find('smtpd') != -1:
print "PID: %s; Command: %s" % (pid, cmd)
# process has already terminated
except IOError:
continue