Анализ выходных данных 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)