如何列出非root用户的所有进程?

如何列出非root用户的所有进程?

我想查看与输出类似的进程列表,ps aux但不显示任何root进程。

答案1

ps u $(pgrep -vu root)

解释

  • pgrep- 搜索进程,返回其数字 PID
  • -v- 滤波器的逆
  • -u root- 过滤 root 拥有的进程
  • $(…)- 代换
  • ps u …- 显示一系列进程的列表视图

更新:原始解决方案实际上与下面的另一个解决方案等效,只是使用xargs而不是$(…)

pgrep -vu root | xargs ps u

答案2

这适用于 Fedora 35(来自 procps-ng 3.3.17 的 ps):

ps u -N -u root

就我个人而言,我总是使用该f标志。使读取输出更容易:ps fu -N -u root

答案3

这适用于我的 Debian 系统和 macOS 10.15。可能有点矫枉过正对于这个要求,但是还算可以适应性强其他要求:

ps -eo pid,stat,ruser,command | awk '{ if ($3 != "root") print $0;}'
  PID STAT RUSER    COMMAND
  312 Ssl  systemd+ /lib/systemd/systemd-timesyncd
  349 Ss   avahi    avahi-daemon: running [raspberrypi4b.local]
  359 Ss   nobody   /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event*
  365 Ss   message+ /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
  393 S    avahi    avahi-daemon: chroot helper
  620 Ss   vnstat   /usr/sbin/vnstatd -n
  910 Ss   Debian-+ /usr/sbin/exim4 -bd -q30m
 2193 R+   pi       ps -eo pid,stat,ruser,command
 2194 S+   pi       awk { if ($3 != "root") print $0;}

# alternatively, for a more compact output: 

ps -eo pid,ruser | awk '{ if ($2 != "root") print $0;}'
  PID RUSER
  312 systemd-timesync
  349 avahi
  359 nobody
  365 messagebus
  393 avahi
  620 vnstat
  910 Debian-exim
 2204 pi
 2205 pi

注意:以上列表并不完整;为简洁起见而剔除

概括:

ps -e使用以下命令显示系统上的每个进程标准语法auxBSD语法

ps -eo该选项是部分-o中列出的几个选项之一,可用于选择 所显示的信息。OUTPUT FORMAT CONTROLman psps为什么要用你不关心的东西来扰乱你的输出?如果你想要这一切,ps -e这就是你所需要的。

ps -eo pid,stat,ruser,command-o选项允许通过使用一个或多个来选择输出参数关键词列在man psSTANDARD FORMAT SPECIFIERS部分下。在这例子ps列出所有 PID、进程状态、真实用户 ID 以及command生成它们的 ID。请再次参阅STANDARD FORMAT SPECIFIERS参考资料 部分man ps以获取完整的关键字列表。

awk用于简单过滤所有用户进程的管道root,当然可以轻松修改以过滤输出中的其他字段ps

相关内容