Как я могу получить имя пользователя из идентификатора процесса в python в Linux? - PullRequest
2 голосов
/ 16 марта 2011

Я хочу получить имя пользователя из идентификатора процесса в python в Linux, поэтому я могу показать его так:

Ответы [ 4 ]

10 голосов
/ 16 марта 2011

Вы можете прочитать uid из /proc/ pid /status. Они находятся в строке, которая начинается с Uid:. Из uid вы можете получить имя пользователя с pwd.getpwuid(pid).pw_name.

UID   = 1
EUID  = 2

def owner(pid):
    '''Return username of UID of process pid'''
    for ln in open('/proc/%d/status' % pid):
        if ln.startswith('Uid:'):
            uid = int(ln.split()[UID])
            return pwd.getpwuid(uid).pw_name

(Константы получены из fs/proc/array.c в ядре Linux.)

4 голосов
/ 20 апреля 2014

Если вы не хотите анализировать файл / proc / PID / status, и процесс не меняет UID, и если процесс поиска кажется дорогостоящим, поиск имени пользователя выполняется тогда:

import os
import pwd
# the /proc/PID is owned by process creator
proc_stat_file = os.stat("/proc/%d" % pid)
# get UID via stat call
uid = proc_stat_file.st_uid
# look up the username from uid
username = pwd.getpwuid(uid)[0]
1 голос
/ 16 марта 2011

вы можете использовать subprocess.Popen для вызова команды оболочки и чтения из стандартного вывода в переменную.

Подпроцесс Python

import subprocess
p=Popen(['/bin/ps', '-o', 'comm,pid,user',stdout=PIPE)
text=p.stdout.read()
0 голосов
/ 16 марта 2011

В Linux вы можете сделать ps -f, и вы получите UID и PID (-f выводит полный формат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...