Je sais que pkill
a plus de règles de filtrage que killall
. Ma question est, quelle est la différence entre:
pkill [signal] name
et
killall [signal] name
J'ai lu que killall
est plus efficace et tue tous les processus et sous-processus (et récursivement) qui correspondent au programme name
. pkill
ne fait pas ça aussi?
Les utilitaires pgrep
et pkill
ont été introduits dans Solaris 7 de Sun et, comme noté g33klord , ils prennent un motif comme argument qui est comparé aux 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 et la sémantique courantes entre pgrep
et pkill
sont utiles lorsque vous voulez être prudent et examiner d'abord les processus de correspondance de liste avec pgrep
, puis procédez à leur suppression avec pkill
. pgrep
et pkill
sont fournis par le package procps , qui fournit également d'autres utilitaires de système de fichiers /proc
, Tels que ps
, top
, free
, uptime
parmi autres.
La commande killall
est fournie par le package psmisc et diffère de pkill
en ce que, par défaut, elle correspond exactement au nom de l'argument (jusqu'aux 15 premiers caractères ) lors de la détermination des processus, des signaux seront envoyés à. L'option -e
, --exact
Peut être spécifiée pour exiger également des correspondances exactes pour les noms de plus de 15 caractères. Cela rend killall
un peu plus sûr à utiliser par rapport à pkill
. Si l'argument spécifié contient des barres obliques (/
), 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 d'expressions régulières des noms de processus, via l'option -r
, --regexp
.
Il y a aussi d'autres différences. La commande killall
, par exemple, propose des options pour faire correspondre les processus par âge (-o
, --older-than
Et -y
, --younger-than
), Tandis que pkill
peut être averti de ne tuer que les processus sur un terminal spécifique (via l'option -t
). Il est donc clair que les deux commandes ont des niches spécifiques.
Notez que la commande killall
sur les systèmes descendants de nix System V (notamment Solaris de Sun , AIX d'IBM et HP-UX de HP ) tue tous les processus pouvant être tués par un utilisateur particulier, arrêtant efficacement le système s'il est exécuté par racine.
Les utilitaires psmisc Linux ont été portés sur BSD (et dans l'extension Mac OS X ), d'où killall
là-bas suit la sémantique "kill process by name".
pkill
est celui qui mérite d'être enseigné aux générations futures, à la fois à cause des filtres que vous mentionnez et du fait qu'il est associé au pgrep
hautement réutilisable. Ils tuent les processus de la même manière, et aucun ne tue récursivement - bien qu'avec pgrep
, vous pouvez sélectionner par session (per-tty, think setsid) ou groupe de processus (think job control).
une différence est que killall
prend le nom exact du processus comme argument tandis que pkill
peut prendre un nom partiel ou complet.
Vous pouvez vous référer cette question pour en savoir plus sur pkill
killall
- tuer les processus par leur nom. Utilisez la commande killall
pour envoyer un signal à un ou plusieurs processus correspondant aux critères de sélection, tels que le nom de la commande, les processus appartenant à un utilisateur spécifique ou tous les processus à l'échelle du système.
pkill
- enverra le signal spécifié (par défaut SIGTERM) à chaque processus au lieu de les lister sur stdout. pkill
peut signaler plusieurs processus comme killall
, mais peut également utiliser des critères de sélection avancés pouvant inclure n'importe quelle combinaison de:
Commande UID Parent Terminal