如何在Python中查找Unix进程

0 投票
2 回答
925 浏览
提问于 2025-04-21 10:26

我想知道'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

看看这个:

通过Python在Linux上查看进程列表

/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

撰写回答