簡體   English   中英

如何在Linux上的python中從進程ID中獲取用戶名?

[英]How could I get the user name from a process id in python on Linux?

我想從Linux上的python中獲取進程ID的用戶名,所以我可以這樣顯示:

name    user name   pid
Chrome  wong2       123

您可以從/proc/ pid /status讀取uid。 他們是以Uid:開頭的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

(常量來自Linux內核中的fs/proc/array.c 。)

如果您不想解析/ 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]

您可以使用subprocess.Popen來調用shell命令,並從stdout讀取變量。

python子進程

import subprocess
p=Popen(['/bin/ps', '-o', 'comm,pid,user',stdout=PIPE)
text=p.stdout.read()

在Linux中,您可以執行ps -f並獲得UID和PID( -f執行完整格式列表)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM