使用 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

相關內容