Executando ps com cláusulas como AND em vez de OR

1

Estou procurando saber se um processo específico está sendo executado como um usuário específico. Para o qual eu posso fazer isso

ps --no-headers -C command -o user | grep user

O que é bem legal, no entanto, 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 se tornaria ainda mais messer se eu não quisesse que o usuário fosse a primeira ou a última coluna. O que seria melhor se eu pudesse especificar as opções -C e -U no PS como este

ps --no-headers -C command -U user -o pid

Isso, no entanto, não funciona, pois as duas cláusulas atuam como ORs ao invés de ANDs. Existe alguma função de 'ps' que estou perdendo, ou talvez outro forro que eu poderia usar? Felicidades!

    
por matt 30.04.2012 / 10:47

1 resposta

3

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 /proc/PID/cmdline (null-separated):

if pids=$(pgrep -x -u "user" "command"); then
    for pid in $pids; do
        tr "
pgrep -x -u "user" "command"
" " " < /proc/$pid/cmdline; echo done fi
    
por 30.04.2012 / 11:00

Tags