首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux上的python中,我如何从进程id中获取用户名?

问在Linux上的python中,我如何从进程id中获取用户名?
EN

Stack Overflow用户
提问于 2011-03-16 23:37:03
回答 4查看 6.7K关注 0票数 3

我想从Linux上的python中的进程id中获取用户名,所以我可以这样显示它:

代码语言:javascript
复制
name    user name   pid
Chrome  wong2       123
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-16 23:46:05

您可以从/proc/pid/status读取uid。它们排在以Uid:开头的队列中。从uid中,您可以使用pwd.getpwuid(pid).pw_name派生用户名。

代码语言:javascript
复制
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。)

票数 11
EN

Stack Overflow用户

发布于 2014-04-20 04:52:11

如果您不想解析/proc/PID/status文件,并且进程没有更改UID,并且如果派生进程查找用户名的代价很高,请尝试:

代码语言:javascript
复制
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]
票数 8
EN

Stack Overflow用户

发布于 2011-03-16 23:57:44

您可以使用subprocess.Popen调用外壳命令,并从标准输出读取到一个变量。

python subprocess

代码语言:javascript
复制
import subprocess
p=Popen(['/bin/ps', '-o', 'comm,pid,user',stdout=PIPE)
text=p.stdout.read()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5327707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档