以 AND 而非 OR 子句运行 ps

以 AND 而非 OR 子句运行 ps

我想查看特定进程是否以特定用户身份运行。对此我可以执行此操作

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

相关内容