Как распечатать топ-10 пользователей по количеству процессов? - PullRequest
0 голосов
/ 14 октября 2010

Как я могу распечатать 10 лучших пользователей в дистрибутиве Linux по количеству запущенных процессов? Мне удалось сделать это с помощью сценария оболочки, но теперь меня интересует, как я могу сделать это с помощью Python.

1 Ответ

2 голосов
/ 14 октября 2010

Анализ выходных данных ps aux не очень приятен и может быть сложным, поскольку не гарантируется, что формат будет одинаковым во всех системах Linux.

Установка стороннего инструмента, такого как psutil или PSI , должна упростить процесс переносимости.

Если вы ищете решение только для Linux без установки стороннего модуля, то может помочь следующее:

В современных системах Linux все процессы перечислены в каталоге / 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...