Cómo hacer que pgrep muestre información completa del proceso


26

¿Hay alguna forma de pgrepdarme toda la información sobre cada proceso que lo pshace? Sé que puede canalizar psa través greppero eso es un montón de escribir y también me da el grepproceso en sí mismo, que no quiero.

Respuestas:


22

pgrepLas opciones de salida son bastante limitadas. Es casi seguro que tendrá que volver a enviarlo pspara obtener la información importante. Puede automatizar esto usando una función bash en su ~/.bashrc.

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

Luego llame al comando con.

ppgrep <pattern>

2
¡Gracias! Lo modifiqué para: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } De lo contrario, si ningún proceso coincide con su búsqueda, psvolcará toda una meguila de uso.
JoelFan

En OS X, psnecesita un guión para las banderas:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch

1
Si desea evitar la página de uso de ps, GNU xargs tiene una opción, -rque solo ejecutará el comando si ha recibido una lista.
Doug

1
La forma más concisa esps fp $(pgrep -d, "$@")
Igor Mikushkin

14

Combinar pgrepcon el psuso xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

Por ejemplo, intente

pgrep -u user | xargs ps -f -p

para obtener una lista completa de procesos de user.

Es bueno que mantenga la primera línea con los nombres de las columnas. grepsiempre suelta los nombres de columna.


¡excelente! esto resuelve un problema extraño con el script de inicio del servidor arcgis para xfvb
prusswan

Esta debería ser la respuesta aceptada, ya que utiliza tuberías Unix de manera adecuada, tomando una lista de PID de una herramienta y retroalimentando a otra (si parece piratería informática, no lo es; esta técnica se puede usar en MUCHAS herramientas UNIX) , como las herramientas de correo electrónico grep. La función Bash ppgrep () es una dependencia innecesaria, y evita confrontar la oportunidad de aprendizaje presentada aquí.)
Scott Prive

10

Lo siguiente solo le ofrece PID + línea de comando completa. Para "toda la información ps", vea otras respuestas ...

La mayoría de los linuxes usan procps -ng . Desde 3.3.4 (lanzado en 2012), pgrep -a( --list-full) muestra la línea de comando completa.
Nota: Por defecto, pgrep solo coincide con el patrón que le das al nombre del ejecutable. Si desea hacer coincidir la línea de comando completa (como lo hace grepping ps), agregue la opción -f( --full).

En versiones anteriores (incluido el proyecto procps original ), la -lopción mostraba información pero su comportamiento variaba:

  • pgrep -fl hizo coincidir el patrón con la línea de comando completa y mostró la línea de comando completa.
  • pgrep -lsolo coincidía solo con el nombre del ejecutable y solo mostraba el nombre del ejecutable.
    Si no desea una coincidencia completa, no puede ver la línea de comando completa :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

No estoy seguro de qué código * BSD usa, pero su página de manual documenta el -flcomportamiento anterior.

Desafortunadamente, ni siquiera puede usarlo de forma -flportátil: en procps-ng reciente, -f( --list-name) siempre imprime solo el nombre del ejecutable.


4

Linux

Para la versión GNU de pgrepla -i(insensibilidad a mayúsculas y minúsculas), no se admite la salida larga + difusa con -af.

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

Página del manual :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

Mac OS

En OSX (y por inferencia, en BSD) -l( salida larga ) en combinación con -f( coincidencia con listas de argumentos completos ) se mostrará el comando completo ( -iagrega mayúsculas y minúsculas):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

La página del manual :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

Use la opción -v para grep: devuelve todo PERO el patrón solicitado.

ps -ef | grep <process> | grep -v grep

Esta fue la mejor respuesta para mí. Le muestra el comando completo sin ser truncado como sucede conpgrep -u user | xargs ps -f -p
BringBackCommodore64

0

No creo que exista, la mayor cantidad de información que puede obtener es el nombre y la identificación del proceso utilizando la opción -l para pgrep.

ps admite todo tipo de opciones de formato, por lo que solo haría un alias para lo que desea guardar al escribir. Una manera simple de excluir el proceso grep de la salida es incluir una tubería adicional grep -v greppara excluir cualquier proceso grep.


0

Para eliminar el grepproceso, puede usar paréntesis como parte de su patrón:

ps -ef | grep '[t]ty'

Puedes hacer esto con psy pgrep:

ps -fp $(pgrep -d, tty)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.