Quelle est la différence entre pkill et killall?

49

Je sais que pkillplus de règles de filtrage que killall. Ma question est la suivante: quelle est la différence entre:

pkill [signal] name

et

killall [signal] name

J'ai lu que killallc'est plus efficace et tuer tous les processus et sous-processus (et récursivement) qui correspondent au nameprogramme. pkillne fait pas ça aussi?

mavillan
la source

Réponses:

46

Les utilitaires pgrepet pkillont été introduits dans Solaris 7 de Sun et, comme l' a noté g33klord , ils prennent un motif en tant qu'argument qui correspond aux noms des processus en cours d'exécution. Alors qu’il pgrepn’imprime que la liste des processus correspondants, pkillle signal spécifié (ou SIGTERMpar défaut) sera envoyé aux processus. Les options et la sémantique communes entre pgrepet pkillsont pratiques lorsque vous voulez être prudent et réviser d’abord les processus de correspondance avec la liste pgrep, puis procéder à leur suppression pkill. pgrepet pkillsont fournis par le le procps package, qui fournit également d' autres /procutilitaires du système de fichiers, tels que ps, top, free, uptimeentre autres.

La killallcommande est fournie par le paquetage psmisc et se distingue du fait pkillque, par défaut, elle correspond exactement au nom de l'argument (jusqu'aux 15 premiers caractères) lors de la détermination du processus auquel les signaux seront envoyés. La -e, --exactoption peut être spécifiée pour exiger également des correspondances exactes pour les noms plus de 15 caractères. Cela rend l' killallutilisation plus sûre comparée à pkill. Si l'argument spécifié contient des caractères slash ( /), l'argument est interprété comme un nom de fichier et les processus exécutant ce fichier sont sélectionnés comme destinataires du signal. killallprend également en charge correspondance d'expression régulière des noms de processus, via -r, --regexpoption.

Il y a aussi d'autres différences. La killallcommande, par exemple, a des options pour faire correspondre les processus par âge ( -o, --older-thanet -y, --younger-than), alors qu'il pkillest possible de ne tuer que les processus sur un terminal spécifique (via l' -toption). Clairement, les deux commandes ont des niches spécifiques.

Notez que la killallcommande sur les systèmes issus de Unix System V (notamment Sun Solaris , IBM AIX et HP-UX HP ) supprime tous les processus susceptibles d'être tués par un utilisateur donné et arrête efficacement le système si elle est exécutée par root.

Les utilitaires Linux psmisc ont été portés sur BSD (et dans l’extension Mac OS X ), d’où killallla sémantique "tuer les processus par leur nom".

Thomas Nyman
la source
La principale différence que je l' ai rencontré est l' arrêt des commandes d'un modèle par un utilisateur est killall -u <username> -r <process>ou ce pkill <process> -U <uid>qui rend killallbeaucoup plus facile pour moi d'utiliser.
jeremysprofile
13

pkillC’est celui qui mérite 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 très réutilisable pgrep. Ils tuent les processus de la même manière, et ni l'un ni l'autre ne tue de manière récursive - bien qu'avec pgrep, vous puissiez sélectionner par session (per-tty, think setsid) ou par groupe de processus (pensez au contrôle du travail).

Gabriel
la source
8

une différence est que killallprendre le nom exact du processus comme argument, alors que le nom pkillpeut être partiel ou complet.

Vous pouvez vous référer à cette question pour en savoir plus sur pkill

electropoet
la source
1

killall- tuer les processus par leur nom. Utilisez la killallcommande pour envoyer un signal à un ou plusieurs processus correspondant à des critères de sélection, tels que le nom de la commande, les processus détenus par 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 la sortie standard. pkillpeut signaler plusieurs processus tels que killall, mais peut également utiliser des critères de sélection avancés pouvant inclure toute combinaison de:

Command UID Parent Terminal

utilisateur196507
la source