Tutorial del comando pgrep de Linux para principiantes (10 ejemplos)
Es posible que ya conozcas elcomando grep en Linux, que busca un patrón y luego imprime el texto coincidente en la salida. ¿Y si el requisito es aplicar este tipo de procesamiento para obtener información selectiva sobre los procesos que se están ejecutando en el sistema?
Pues te alegrará saber que existe una herramienta de línea de comandos -pgrep- que te permite hacer exactamente esto. En este tutorial, hablaremos de los fundamentos de pgrep utilizando algunos ejemplos fáciles de entender. Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos aquí se han probado en una máquina Ubuntu 20.04 LTS y en Debian 10.
El comando pgrep de Linux
El comando pgrep en Linux permite a los usuarios buscar procesos basándose en el nombre y otros atributos. A continuación se muestra su sintaxis:
pgrep [options] pattern
Y así es como lo explica la página man 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.
A continuación se presentan algunos ejemplos al estilo de las preguntas y respuestas que deberían darte una buena idea de cómo funciona el comando pgrep.
Q1. ¿Cómo encontrar el ID de un proceso que pertenece a un usuario concreto?
Esto se puede hacer utilizando la opción de línea de comandos -u. Por ejemplo, para encontrar el ID del proceso ‘gedit’ que pertenece al usuario ‘himanshu’, utiliza pgrep de la siguiente manera:
pgrep -u himanshu gedit
Esta es la salida que produjo este comando en mi caso:
Q2. ¿Cómo hacer que pgrep imprima el recuento de los procesos coincidentes?
Si quieres que la herramienta sólo imprima el recuento, y no los propios IDs, utiliza la opción de línea de comandos -c. Por ejemplo, para conocer el recuento de los procesos propiedad del usuario ‘himanshu’, ejecuta el siguiente comando:
pgrep -c -u himanshu
A continuación se muestra la salida que produjo este comando en mi sistema:
83
Q3. ¿Cómo utilizar un delimitador personalizado en la salida?
Por defecto, los ID de los procesos en la salida están delimitados por una nueva línea. Sin embargo, si quieres, puedes cambiar el delimitador, algo que puedes hacer utilizando la opción -d de la línea de comandos.
Por ejemplo, yo quería utilizar 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 pgrep no distinga entre mayúsculas y minúsculas?
Por defecto, la búsqueda pgrep distingue entre mayúsculas y minúsculas. Sin embargo, si quieres, puedes hacer que no distinga entre mayúsculas y minúsculas. Para ello, debes utilizar la opción de línea de comandos -i.
Por ejemplo:
pgrep -i gedit
Q5. ¿Cómo hacer que pgrep liste también los nombres de los procesos?
Para ello, utiliza la opción de línea de comandos -l.
Aquí tienes un ejemplo:
pgrep -u himanshu -l
Aquí tienes 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
...
...
...
Así puedes ver que, además de los ID de los procesos, también se producen nombres de procesos en la salida.
Q6. ¿Cómo hacer que pgrep liste también el comando completo?
Si quieres que pgrep muestre el comando completo que se utilizó para lanzar cada proceso, utiliza la opción de línea de comandos -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
Q7. ¿Cómo hacer que pgrep sólo muestre el proceso más reciente?
Si en lugar de todos los procesos, quieres que pgrep muestre sólo el proceso más reciente, puedes hacerlo utilizando la opción de línea de comandos -n.
Aquí tienes un ejemplo:
pgrep -u himanshu -n -l
Y la siguiente es la salida que produjo este comando:
7163 thunderbird
Puedo confirmar que Thunderbird fue efectivamente el proceso más reciente lanzado por el usuario ‘himanshu’.
Q8. ¿Cómo hacer que pgrep sólo muestre el proceso más antiguo?
Para ello, utiliza la opción de línea de comandos -o.
pgrep -u himanshu -o -l
Y aquí está la salida que produjo este comando:
1793 systemd
Conclusión
Así que puedes ver que pgrep es un comando extremadamente útil. Una vez que hayas terminado de practicar la opción de línea de comandos que hemos discutido aquí, puedes dirigirte a lapágina man de la herramienta para aprender más sobre ella.