Le pgrep
et pkill
Les utilitaires ont été introduits dans Solaris 7 de Sun et, comme l'a noté g33klord, ils prennent un modèle comme argument qui est mis en correspondance avec les noms des processus en cours d'exécution. Alors que pgrep
imprime simplement une liste de processus correspondants, pkill
enverra le signal spécifié (ou SIGTERM
par défaut) aux processus. Les options communes et la sémantique entre pgrep
et pkill
est pratique lorsque vous voulez être prudent et examiner d'abord les processus de correspondance de liste avec pgrep
, puis continuez à les tuer avec pkill
. pgrep
et pkill
sont fournis par le package procps, qui fournit également d'autres /proc
utilitaires de système de fichiers, tels que ps
, top
, free
, uptime
entre autres.
Le killall
La commande est fournie par le package psmisc et diffère de pkill
en ce que, par défaut, il correspond exactement au nom de l'argument (jusqu'aux 15 premiers caractères) lors de la détermination des processus auxquels les signaux seront envoyés. Le -e
, --exact
L'option peut être spécifiée pour exiger également des correspondances exactes pour les noms de plus de 15 caractères. Cela fait killall
un peu plus sûr à utiliser par rapport à pkill
. Si l'argument spécifié contient une barre oblique (/
), l'argument est interprété comme un nom de fichier et les processus exécutant ce fichier particulier seront sélectionnés comme destinataires du signal. killall
prend également en charge la correspondance des expressions régulières des noms de processus, via le -r
, --regexp
option.
Il y a aussi d'autres différences. Le killall
La commande par exemple a des options pour faire correspondre les processus par âge (-o
, --older-than
et -y
, --younger-than
), tandis que pkill
peut être dit de ne tuer que les processus sur un terminal spécifique (via le -t
option). Il est donc clair que les deux commandes ont des niches spécifiques.
Notez que le killall
commande sur les systèmes descendant d'Unix System V (notamment Solaris de Sun, AIX d'IBM et HP-UX de HP) tue tous processus tuables par un utilisateur particulier, arrêtant efficacement le système s'il est exécuté par root.
Les utilitaires Linux psmisc ont été portés sur BSD (et en extension Mac OS X), d'où killall
suit la sémantique "tuer les processus par nom".
pkill
est celui qui vaut la peine d'être enseigné aux générations futures, à la fois en raison des filtres que vous mentionnez et du fait qu'il est associé au hautement réutilisable pgrep
. Ils tuent les processus de la même manière, et aucun ne tue de manière récursive - mais avec pgrep
, vous pouvez sélectionner par session (par tty, pensez setsid) ou par groupe de processus (pensez au contrôle des tâches).
une différence est que killall
prendre le nom exact du processus comme argument alors que pkill
peut prendre un nom partiel ou complet.
Vous pouvez vous référer à cette question pour en savoir plus sur pkill