【问题标题】:How could I get the user name from a process id in python on Linux?如何从 Linux 上的 python 中的进程 ID 获取用户名?
【发布时间】:2011-03-16 15:37:03
【问题描述】:

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

name    user name   pid
Chrome  wong2       123

【问题讨论】:

    标签: python linux process


    【解决方案1】:

    您可以从/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。)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        python subprocess

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

        【讨论】:

          【解决方案4】:

          在 Linux 中,您可以通过 ps -f 获取 UID 和 PID(-f 提供完整格式列表)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-11-02
            • 2019-05-03
            • 2011-04-15
            • 2012-03-14
            • 1970-01-01
            • 1970-01-01
            • 2020-11-03
            • 1970-01-01
            相关资源
            最近更新 更多