【发布时间】:2011-03-16 15:37:03
【问题描述】:
我想从 Linux 上的 python 中的进程 id 中获取用户名,所以我可以这样显示:
name user name pid
Chrome wong2 123
【问题讨论】:
我想从 Linux 上的 python 中的进程 id 中获取用户名,所以我可以这样显示:
name user name pid
Chrome wong2 123
【问题讨论】:
您可以从/proc/pid/status 读取 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 命令,并从标准输出读取到变量。
import subprocess
p=Popen(['/bin/ps', '-o', 'comm,pid,user',stdout=PIPE)
text=p.stdout.read()
【讨论】:
在 Linux 中,您可以通过 ps -f 获取 UID 和 PID(-f 提供完整格式列表)。
【讨论】: