web-dev-qa-db-fra.com

Quelle est la différence entre pkill et killall?

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?

54
mavillan

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".

49
Thomas Nyman

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).

14
Gabriel

une différence est que killallprend 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

8
electropoet

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

1
user196507