Dans un script Shell, pour savoir si un programme tourne on a souvent recourt à une commande du genre:

ps -eaf | grep firefox

Et la sortie de la commande ps ressemble à:

1000      3207     1 13 07:30 ?        00:08:33 /opt/mozilla/firefox/firefox
1000      4592  3078  0 08:35 pts/0    00:00:00 grep firefox

Pour parser cette sortie, on commence par exclure le processus grep que l'on utilise pour filtrer les résultats de ps:

ps -eaf | grep firefox | grep -v grep

Pour n'obtenir que:

1000      3207     1 13 07:30 ?        00:08:33 /opt/mozilla/firefox/firefox

Une autre façon de le faire consiste à utiliser l'option -C de la commande ps qui permet de filtrer la sortie selon le nom d'une commande:

 ps -f -C firefox
UID        PID  PPID  C STIME TTY          TIME CMD
1000      3207     1 12 07:30 ?        00:09:12 /opt/mozilla/firefox/firefox

Mais lors du parsing, il me faudra enlever la première ligne avec les noms des colonnes.

D'où l'intérêt de recourir à la commande pgrep qui renvoie uniquement le PID du processus trouvé:

pgrep firefox
3207

Attention, le flag -f de pgrep n'a pas le même usage que celui de ps. ps affiche la ligne de commande avec -f alors que pgrep cherche la pattern fournie dans toute la ligne de commande au lieu de seulement le nom du process (Quand -f n'est pas présent).

Donc pgrep -f firefox donnera le même résultat que pgrep firefox ; par contre pgrep mozilla ne renverra aucun résultat.

Comme ps, pgrep peut lister uniquement les processus d'un utilisateur donné:

pgrep -u root sshd

On peut aussi se contenter de compter les processus correspondant aux critères donnés avec le flag -c.

D'autres options intéressantes existent comme par exemple celle qui permet de ne lister que le dernier processus lancé.