我正在查看特定進程是否正在以特定用戶身份運行。為此我可以這樣做
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