如何显示命令中列出的每个用户最旧的进程who
?我尝试过使用命令
ps -u $user --sort +start_time
但找不到过滤用户并从中提取 PID 的方法。输出应该类似于:
user1 oldestprocessPID
user2 oldestprocessPID
Linux版本:Ubuntu 18.04.5 LTS
答案1
给定某个用户名的最旧的 PIDuser
可以通过
pgrep -U user -o
where-o
负责返回最旧的 PID(请参阅pgrep
手册)。
要为当前登录的所有用户运行此命令:
users | tr ' ' '\n' |
while read user; do
printf '%s %d\n' "$user" "$(pgrep -U "$user" -o)"
done
这调用了users
在一行中输出当前登录用户的实用程序。将用户名之间的空格更改tr
为换行符,循环将这些空格一一读取到变量 中user
。对于每个用户名,pgrep -U "$user" -o
都会调用。其输出用作参数来printf
格式化该特定用户的结果行。
read
对于实用程序可以读取到分隔符-d
(例如zsh
和)的 shell bash
,您可以像这样摆脱tr
:
users |
while read -d ' ' user; do
printf '%s %d\n' "$user" "$(pgrep -U "$user" -o)"
done