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
pgrep
soporta varias condiciones:
pgrep -x -u "user" "command"
Reemplace -x
con -f
para que también coincida con los argumentos; agregar -l
para 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