Estou procurando ver se um processo específico está sendo executado por um usuário específico. Para o qual eu posso fazer isso
ps --no-headers -C command -o user | grep user
O que é muito legal, mas fica um pouco feio se eu quiser imprimir os argumentos (o que pode interferir no grep para o nome de usuário!)
ps --no-headers -C command -o user,pid,comm | egrep \^user
Isso ficaria ainda mais complicado se eu não quisesse o usuário como a primeira ou a última coluna. O que seria mais legal seria se eu pudesse especificar as opções -C e -U no PS assim
ps --no-headers -C command -U user -o pid
No entanto, isso não funciona, pois as duas cláusulas atuam como ORs em vez de ANDs. Há alguma função de 'ps' que estou faltando, ou talvez outro forro legal que eu possa usar? Saúde!
Responder1
pgrep
suporta várias condições:
pgrep -x -u "user" "command"
Substitua -x
por -f
para também corresponder aos argumentos; adicione -l
para exibir a linha de comando.
Você também pode ler a linha de comando diretamente de (separado por nulos):/proc/PID/cmdline
if pids=$(pgrep -x -u "user" "command"); then
for pid in $pids; do
tr "\0" " " < /proc/$pid/cmdline; echo
done
fi