![如何列出非root用户的所有进程?](https://linux22.com/image/199830/%E5%A6%82%E4%BD%95%E5%88%97%E5%87%BA%E9%9D%9Eroot%E7%94%A8%E6%88%B7%E7%9A%84%E6%89%80%E6%9C%89%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我想查看与输出类似的进程列表,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
使用以下命令显示系统上的每个进程标准语法(aux
是BSD语法)
ps -eo
该选项是部分-o
中列出的几个选项之一,可用于选择 所显示的信息。OUTPUT FORMAT CONTROL
man ps
ps
为什么要用你不关心的东西来扰乱你的输出?如果你想要这一切,ps -e
这就是你所需要的。
ps -eo pid,stat,ruser,command
该-o
选项允许通过使用一个或多个来选择输出参数关键词列在man ps
该STANDARD FORMAT SPECIFIERS
部分下。在这例子,ps
列出所有 PID、进程状态、真实用户 ID 以及command
生成它们的 ID。请再次参阅STANDARD FORMAT SPECIFIERS
参考资料 部分man ps
以获取完整的关键字列表。
awk
用于简单过滤所有用户进程的管道root
,当然可以轻松修改以过滤输出中的其他字段ps
。