Solución 1:
pgrep
Las opciones de salida son bastante limitadas. Es casi seguro que tendrás que devolverlo a través de ps
para sacar la información importante. Puede automatizar esto usando una función bash en su ~/.bashrc
.
function ppgrep() { pgrep "[email protected]" | xargs --no-run-if-empty ps fp; }
Luego llame al comando con.
ppgrep <pattern>
Solución 2:
Combinar pgrep
con ps
usando 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
. Opción -u user
límites pgrep
al usuario dado (como un número o nombre) mientras que el ps
opciones -f -p
solicitar una lista de formato completo para el PID seleccionado.
Es bueno que mantenga la primera línea con los nombres de las columnas. grep
siempre elimina los nombres de las columnas.
Solución 3:
Lo siguiente solo le proporciona PID + línea de comandos completa. Para "toda la información ps
hace", ver otras respuestas...
La mayoría de los linux 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 hace coincidir el patrón que proporciona con el nombre del ejecutable. Si desea hacer coincidir con la línea de comando completa (como lo hace grepping ps), agregue el -f
(--full
) opción.
En versiones anteriores (incluido el proyecto procps original), -l
la opción mostró información pero su comportamiento varió:
pgrep -fl
comparó el patrón con la línea de comando completa y mostró la línea de comando completa.pgrep -l
solo coincidió solo con el nombre del ejecutable y mostró solo el nombre del ejecutable.
Si no desea una coincidencia completa, no podrá ver la línea de comandos completa :-([https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15]
No estoy seguro de qué código usa *BSD, pero su página de manual documenta el antiguo -fl
comportamiento.
Desafortunadamente, ni siquiera puedes usar -fl
portablemente - en procps-ng reciente, -f
(--list-name
) siempre imprime solo el nombre del ejecutable.
Solución 4:
Linux
Para la versión GNU de pgrep
La salida larga + difusa se logra con -af
y la cadena debe distinguir entre mayúsculas y minúsculas (es decir, no hay ninguna opción para distinguir entre mayúsculas y minúsculas ).
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
Página man:
-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.
MacOS
En OSX (y por inferencia, en BSD) -l
(salida larga ) en combinación con -f
(coincidencia con listas completas de argumentos ) mostrará el comando completo (-i
agrega mayúsculas y minúsculas):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: [email protected] [mux] t
La página man:
-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.
Solución 5:
Use la opción -v para grep:devuelve todo MENOS el patrón solicitado.
ps -ef | grep <process> | grep -v grep