Ejecutando ps con cláusulas como AND en lugar de OR

Ejecutando ps con cláusulas como AND en lugar de OR

Estoy buscando ver si un proceso específico se está ejecutando como un usuario específico. Por lo que puedo hacer esto

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

Lo cual es bastante bueno, sin embargo, se vuelve un poco feo si luego quiero imprimir los argumentos (¡lo que puede interferir con el grep del nombre de usuario!)

ps --no-headers -C command -o user,pid,comm | egrep \^user

Esto sería aún más complicado si no quisiera que el usuario fuera la primera o la última columna. Lo que sería mejor si pudiera especificar las opciones -C y -U en PS de esta manera

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

Sin embargo, esto no funciona ya que las dos cláusulas actúan como OR en lugar de AND. ¿Hay alguna función de 'ps' que me falta, o tal vez otra línea interesante que podría usar? ¡Salud!

Respuesta1

pgrepsoporta varias condiciones:

pgrep -x -u "user" "command"

Reemplace -xcon -fpara que también coincida con los argumentos; agregar -lpara mostrar la línea de comando.

También puede leer la línea de comando directamente desde (separada 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

información relacionada