我想查看特定进程是否以特定用户身份运行。对此我可以执行此操作
ps --no-headers -C command -o user | grep user
这非常简洁,但是如果我想打印参数(这可能会干扰用户名的 grep!),它就会变得有点丑陋。
ps --no-headers -C command -o user,pid,comm | egrep \^user
如果我不想将用户作为第一列或最后一列,情况会变得更加混乱。如果我可以在 PS 中指定 -C 和 -U 选项,情况会更简单,如下所示
ps --no-headers -C command -U user -o pid
但是,这不起作用,因为这两个子句充当的是 OR 而不是 AND。我是否遗漏了“ps”的某些功能,或者我可以使用另一个简洁的单行代码?谢谢!
答案1
pgrep
支持各种条件:
pgrep -x -u "user" "command"
替换-x
为-f
也匹配参数;添加-l
以显示命令行。
您也可以直接从(以空值分隔)读取命令行:/proc/PID/cmdline
if pids=$(pgrep -x -u "user" "command"); then
for pid in $pids; do
tr "\0" " " < /proc/$pid/cmdline; echo
done
fi