Tutorial del comando pgrep de Linux para principiantes (10 ejemplos)

Es posible que ya conozca el comando grep en Linux, que busca un patrón y luego imprime el texto correspondiente en la salida. ¿Qué sucede si el requisito es aplicar este tipo de procesamiento para obtener información seleccionada sobre los procesos que se ejecutan actualmente en el sistema?
Bueno, te alegrará saber que existe una herramienta de línea de comandos: pgrep – que te permite hacer exactamente esto. En este tutorial, discutiremos los conceptos básicos de pgrep utilizando algunos ejemplos fáciles de entender. Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos aquí se probaron en una máquina con Ubuntu 20.04 LTS y en Debian 10.
Comando pgrep de Linux
El comando pgrep en Linux permite a los usuarios buscar procesos en función del nombre y otros atributos. A continuación se muestra su sintaxis:
pgrep [options] pattern
Y así es como lo explica la página de manual de la herramienta:
pgrep looks through the currently running processes and lists the process IDs which match the selection criteria to stdout. All the criteria have to match.
Los siguientes son algunos ejemplos de estilo de preguntas y respuestas que deberían darle una buena idea de cómo funciona el comando pgrep.
Q1. ¿Cómo encontrar el ID de un proceso propiedad de un usuario específico?
Esto se puede hacer usando la opción de línea de comando -u. Por ejemplo, para encontrar el ID del proceso ‘gedit’ propiedad del usuario ‘himanshu’, use pgrep de la siguiente manera:
pgrep -u himanshu gedit
Aquí está el resultado que produjo este comando en mi caso:
Q2. ¿Cómo hacer que pgrep print cuente los procesos coincidentes?
En caso de que desee que la herramienta solo imprima el recuento, y no los ID en sí, utilice la opción de línea de comandos -c. Por ejemplo, para conocer el número de procesos propiedad del usuario ‘himanshu’, ejecute el siguiente comando:
pgrep -c -u himanshu
El siguiente es el resultado que este comando produjo en mi sistema:
83
Q3. ¿Cómo usar un delimitador personalizado en la salida?
De forma predeterminada, los ID de proceso en la salida están delimitados por una nueva línea. Sin embargo, si lo desea, puede cambiar el delimitador, algo que puede hacer con la opción de línea de comandos -d.
Por ejemplo, quería usar dos puntos (:) como delimitador, así que ejecuté el comando pgrep de la siguiente manera:
pgrep -u himanshu -d:
Y la siguiente es la salida que produjo el comando:
1793:1794:1807:1811:1813:1817:1820:1914:1917:1922:1925:1936:1938:1954:1974:1978:1980:1982:1993:1999 :2008:2009:2012:2020:2024:2034:2036:2043:2048:2049:2051:2052:2055:2064:2068:2073:2074:2085:2088: 2093:2094:2095:2098:2101:2104:2117:2125:2161:2162:2168:2173:2182:2201:2213:2233:2245:2266:2279: 2388:2409:2430:2456:2473:2564:2647:3085:3108:3178:3284:3297:3320:3325:3467:3487:3980:4040:4658: 5668:5721:5777:6271:6281:6512:6808
Q4. ¿Cómo hacer que la búsqueda de pgrep no distinga entre mayúsculas y minúsculas?
De forma predeterminada, la búsqueda de pgrep distingue entre mayúsculas y minúsculas. Sin embargo, si lo desea, puede hacer que no distinga entre mayúsculas y minúsculas. Para esto, debe usar la opción de línea de comando -i.
Por ejemplo:
pgrep -i gedit
P5. ¿Cómo hacer que los nombres de los procesos de la lista pgrep también?
Para esto, use la opción de línea de comando -l.
Aquí hay un ejemplo:
pgrep -u himanshu -l
Aquí hay un extracto de la salida producida en mi sistema:
1793 systemd 1794 (sd-pam) 1807 gnome-keyring-d 1811 gdm-x-session 1813 Xorg 1817 dbus-daemon 1820 gnome-session-b 1914 ssh-agent 1917 gvfsd 1922 gvfsd-fuse 1925 at-spi-bus-laun 1936 dbus-daemon 1938 at-spi2-registr 1954 gnome-shell 1974 ibus-daemon 1978 ibus-dconf 1980 ibus-x11 1982 ibus-portal 1993 gnome-shell-cal 1999 evolution-sourc 2008 dconf-service 2009 gvfs-udisks2-vo 2012 goa-daemon 2020 gvfs-mtp-volume 2024 gvfs-goa-volume ... ... ...
Entonces puede ver que, además de los ID de proceso, también se generaron nombres de proceso en la salida.
P6. ¿Cómo hacer que la lista pgrep también tenga un comando completo?
En caso de que desee que pgrep muestre el comando completo que se usó para iniciar cada proceso, use la opción de línea de comando -a.
pgrep -u himanshu -a
1793 /lib/systemd/systemd --user 1794 (sd-pam) 1807 /usr/bin/gnome-keyring-daemon --daemonize --login 1811 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --session=ubuntu 1813 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3 1817 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only 1820 /usr/lib/gnome-session/gnome-session-binary --session=ubuntu 1914 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --session=ubuntu 1917 /usr/lib/gvfs/gvfsd 1922 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes 1925 /usr/lib/at-spi2-core/at-spi-bus-launcher 1936 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3 1938 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session 1954 /usr/bin/gnome-shell 1974 ibus-daemon --xim --panel disable 1978 /usr/lib/ibus/ibus-dconf 1980 /usr/lib/ibus/ibus-x11 --kill-daemon 1982 /usr/lib/ibus/ibus-portal 1993 /usr/lib/gnome-shell/gnome-shell-calendar-server 1999 /usr/lib/evolution/evolution-source-registry 2008 /usr/lib/dconf/dconf-service 2009 /usr/lib/gvfs/gvfs-udisks2-volume-monitor 2012 /usr/lib/gnome-online-accounts/goa-daemon 2020 /usr/lib/gvfs/gvfs-mtp-volume-monitor 2024 /usr/lib/gvfs/gvfs-goa-volume-monitor 2034 /usr/lib/gnome-online-accounts/goa-identity-service 2036 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor 2043 /usr/lib/gvfs/gvfs-afc-volume-monitor
P7. ¿Cómo hacer que pgrep solo muestre el proceso más nuevo?
Si en lugar de todos los procesos, desea que pgrep genere solo el proceso más reciente, esto se puede hacer usando la opción de línea de comando -n.
Aquí hay un ejemplo:
pgrep -u himanshu -n -l
Y el siguiente es el resultado que produjo este comando:
7163 thunderbird
Puedo confirmar que Thunderbird fue, de hecho, el proceso más reciente iniciado por el usuario ‘himanshu’.
P8. ¿Cómo hacer que pgrep solo muestre el proceso más antiguo?
Para ello, utilice la opción de línea de comandos -o.
pgrep -u himanshu -o -l
Y aquí está el resultado que produjo este comando:
1793 systemd
Conclusión
Entonces puede ver que pgrep es un comando extremadamente útil. Una vez que haya terminado de practicar la opción de línea de comando que hemos discutido aquí, puede dirigirse a la herramienta página man para aprender más al respecto.