Respuestas:
pgrep
Las opciones de salida son bastante limitadas. Es casi seguro que tendrá que volver a enviarlo ps
para 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>
ps
necesita un guión para las banderas:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
que solo ejecutará el comando si ha recibido una lista.
ps fp $(pgrep -d, "$@")
Combinar pgrep
con el ps
uso 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. grep
siempre suelta los nombres de columna.
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 -l
opció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 -l
solo coincidía solo con el nombre del ejecutable y solo mostraba el nombre del ejecutable. No estoy seguro de qué código * BSD usa, pero su página de manual documenta el -fl
comportamiento anterior.
Desafortunadamente, ni siquiera puede usarlo de forma -fl
portátil: en procps-ng reciente, -f
( --list-name
) siempre imprime solo el nombre del ejecutable.
Para la versión GNU de pgrep
la -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
-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.
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 ( -i
agrega 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.
Use la opción -v para grep: devuelve todo PERO el patrón solicitado.
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
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 grep
para excluir cualquier proceso grep.
Para eliminar el grep
proceso, puede usar paréntesis como parte de su patrón:
ps -ef | grep '[t]ty'
Puedes hacer esto con ps
y pgrep
:
ps -fp $(pgrep -d, tty)
Esto te ayudará, supongo:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
De lo contrario, si ningún proceso coincide con su búsqueda,ps
volcará toda una meguila de uso.