如何确定正在运行的进程的 UID/GID

Bul*_* M. 3 permissions top unix-philosophy uid

有没有办法检索正在运行的进程的 UID/GID?目前,我只知道在 htop 中查找它的方法。但我不想依赖第三方工具,更喜欢使用内置的 unix 命令。你能推荐几个有用的oneliners吗?

这并没有满足我的好奇心:

如何以编程方式检索正在运行的进程的 GID

top 只显示用户而不显示组。

Ipo*_*cer 13

$ stat -c "%u %g" /proc/$pid/
1000 1000
Run Code Online (Sandbox Code Playgroud)

或者

$ egrep "^(U|G)id" /proc/$pid/status
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
Run Code Online (Sandbox Code Playgroud)

或仅使用 bash 内置函数:

$ while read -r line;do [ "${line:1:2}" = "id" ] && echo $line;done < /proc/17359/status 
Pid: 17359
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
Run Code Online (Sandbox Code Playgroud)

  • 根据手册页 - http://man7.org/linux/man-pages/man5/proc.5.html - 4 个值代表“.....真实、有效、保存集和文件系统...” (3认同)

thr*_*rig 5

或者假设一个 *BSD 系统(因为它ps是不可移植的,而且 OpenBSD 已经放弃了/proc很多版本)

ps -o uid,gid -p ...
Run Code Online (Sandbox Code Playgroud)

  • @BulatM。这个答案适用于许多 Unix 变体。如果您使用“-o user,group”而不是“-o uid,gid”,它适用于所有 POSIX 系统,但显示名称而不是数值。 (3认同)
  • @Bulat M。参见 2009 年 openbsd-misc 邮件列表上的[此线程](https://marc.info/?t=125341144400003&amp;r=1&amp;w=2)。 `procfs` 文件系统最终在 [release 5.7 中被完全删除] ](https://www.openbsd.org/57.html)(2015 年 5 月)。 (2认同)