Vous connaissez peut-être déjà la commande grep sous Linux, qui recherche un modèle, puis imprime le texte correspondant dans la sortie. Que se passe-t-il si l'exigence est d'appliquer ce type de traitement pour récupérer des informations sélectionnées sur les processus en cours d'exécution dans le système ?
Eh bien, vous serez heureux de savoir qu'il existe un outil en ligne de commande - pgrep - qui vous permet de faire exactement cela. Dans ce didacticiel, nous aborderons les bases de pgrep à l'aide d'exemples faciles à comprendre. Mais avant cela, il convient de mentionner que tous les exemples ici ont été testés sur une machine Ubuntu 20.04 LTS et sur Debian 10.
Commande Linux pgrep
La commande pgrep sous Linux permet aux utilisateurs de rechercher des processus en fonction du nom et d'autres attributs. Voici sa syntaxe :
pgrep [options] pattern
Et voici comment la page de manuel de l'outil l'explique :
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.
Voici quelques exemples sous forme de questions-réponses qui devraient vous donner une bonne idée du fonctionnement de la commande pgrep.
Q1. Comment trouver l'ID d'un processus appartenant à un utilisateur spécifique ?
Cela peut être fait en utilisant l'option de ligne de commande -u. Par exemple, pour trouver l'ID du processus 'gedit' appartenant à l'utilisateur 'himanshu', utilisez pgrep de la manière suivante :
pgrep -u himanshu gedit
Voici la sortie que cette commande a produite dans mon cas :
Q2. Comment faire en sorte que pgrep print compte les processus correspondants ?
Si vous souhaitez que l'outil imprime uniquement le décompte, et non les ID eux-mêmes, utilisez l'option de ligne de commande -c. Par exemple, pour connaître le nombre de processus appartenant à l'utilisateur "himanshu", exécutez la commande suivante :
pgrep -c -u himanshu
Voici la sortie produite par cette commande sur mon système :
83
Q3. Comment utiliser un délimiteur personnalisé en sortie ?
Par défaut, les ID de processus en sortie sont délimités par une nouvelle ligne. Cependant, si vous le souhaitez, vous pouvez modifier le délimiteur, ce que vous pouvez faire en utilisant l'option de ligne de commande -d.
Par exemple, je voulais utiliser deux-points (:) comme délimiteur, j'ai donc exécuté la commande pgrep de la manière suivante :
pgrep -u himanshu -d:
Et voici la sortie produite par la commande :
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. Comment rendre la recherche pgrep insensible à la casse ?
Par défaut, la recherche pgrep est sensible à la casse. Cependant, si vous le souhaitez, vous pouvez le rendre insensible à la casse. Pour cela, vous devez utiliser l'option de ligne de commande -i.
Par exemple :
pgrep -i gedit
Q5. Comment créer également des noms de processus de liste pgrep ?
Pour cela, utilisez l'option de ligne de commande -l.
Voici un exemple :
pgrep -u himanshu -l
Voici un extrait de la sortie produite sur mon système :
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
...
...
...
Ainsi, vous pouvez voir qu'en plus des ID de processus, des noms de processus ont également été produits dans la sortie.
Q6. Comment rendre la commande pgrep list complète également ?
Si vous souhaitez que pgrep affiche la commande complète qui a été utilisée pour lancer chaque processus, utilisez l'option de ligne de commande -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. Comment faire en sorte que pgrep n'affiche que le processus le plus récent ?
Si, au lieu de tous les processus, vous souhaitez que pgrep affiche uniquement le processus le plus récent, vous pouvez le faire à l'aide de l'option de ligne de commande -n.
Voici un exemple :
pgrep -u himanshu -n -l
Et voici la sortie produite par cette commande :
7163 thunderbird
Je peux confirmer que Thunderbird était bien le processus le plus récent lancé par l'utilisateur "himanshu".
Q8. Comment faire en sorte que pgrep n'affiche que le processus le plus ancien ?
Pour cela, utilisez l'option de ligne de commande -o.
pgrep -u himanshu -o -l
Et voici le résultat produit par cette commande :
1793 systemd
Conclusion
Vous pouvez donc voir que pgrep est une commande extrêmement utile. Une fois que vous avez fini de pratiquer l'option de ligne de commande dont nous avons parlé ici, vous pouvez vous diriger vers la page de manuel de l'outil pour en savoir plus.