如何按流程数打印前10名用户?

时间:2010-10-13 23:47:07

标签: python linux process

我怎么能按照运行的进程数打印linux发行版的前10位用户?我已经设法使用shell脚本执行此操作,但现在我对如何使用Python执行此操作感兴趣。

1 个答案:

答案 0 :(得分:2)

解析ps aux的输出不是很愉快,并且可能很棘手,因为在所有Linux系统上格式都不保证是相同的。

安装第psutilPSI等第三方工具可让您轻松便携。

如果您在寻找没有安装第三方模块的Linux解决方案,那么以下内容可能有所帮助:

在现代Linux系统上,所有进程都通过其pid列在/ procs目录中。目录的所有者是该进程的所有者。

import os
import stat
import pwd
import collections
import operator

os.chdir('/proc')
dirnames=(dirname for dirname in os.listdir('.') if dirname.isdigit())
statinfos=(os.stat(dirname) for dirname in dirnames)
uids=(statinfo[stat.ST_UID] for statinfo in statinfos)
names=(pwd.getpwuid(uid).pw_name for uid in uids)
counter=collections.defaultdict(int)
for name in names:
    counter[name]+=1
count=counter.items()
count.sort(key=operator.itemgetter(1),reverse=True)
print('\n'.join(map(str,count[:10])))

产量

('root', 130)
('unutbu', 55)
('www-data', 7)
('avahi', 2)
('haldaemon', 2)
('daemon', 1)
('messagebus', 1)
('syslog', 1)
('Debian-exim', 1)
('mysql', 1)