Je sais que pkill
plus 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 killall
c'est plus efficace et tuer tous les processus et sous-processus (et récursivement) qui correspondent au name
programme. pkill
ne fait pas ça aussi?
linux
process
kill
process-management
mavillan
la source
la source
Réponses:
Les utilitaires
pgrep
etpkill
ont é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’ilpgrep
n’imprime que la liste des processus correspondants,pkill
le signal spécifié (ouSIGTERM
par défaut) sera envoyé aux processus. Les options et la sémantique communes entrepgrep
etpkill
sont pratiques lorsque vous voulez être prudent et réviser d’abord les processus de correspondance avec la listepgrep
, puis procéder à leur suppressionpkill
.pgrep
etpkill
sont fournis par le le procps package, qui fournit également d' autres/proc
utilitaires du système de fichiers, tels queps
,top
,free
,uptime
entre autres.La
killall
commande est fournie par le paquetage psmisc et se distingue du faitpkill
que, 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
,--exact
option peut être spécifiée pour exiger également des correspondances exactes pour les noms plus de 15 caractères. Cela rend l'killall
utilisation 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.killall
prend également en charge correspondance d'expression régulière des noms de processus, via-r
,--regexp
option.Il y a aussi d'autres différences. La
killall
commande, par exemple, a des options pour faire correspondre les processus par âge (-o
,--older-than
et-y
,--younger-than
), alors qu'ilpkill
est possible de ne tuer que les processus sur un terminal spécifique (via l'-t
option). Clairement, les deux commandes ont des niches spécifiques.Notez que la
killall
commande 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ù
killall
la sémantique "tuer les processus par leur nom".la source
killall -u <username> -r <process>
ou cepkill <process> -U <uid>
qui rendkillall
beaucoup plus facile pour moi d'utiliser.pkill
C’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éutilisablepgrep
. 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'avecpgrep
, vous puissiez sélectionner par session (per-tty, think setsid) ou par groupe de processus (pensez au contrôle du travail).la source
une différence est que
killall
prendre le nom exact du processus comme argument, alors que le nompkill
peut être partiel ou complet.Vous pouvez vous référer à cette question pour en savoir plus sur pkill
la source
killall
- tuer les processus par leur nom. Utilisez lakillall
commande 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.pkill
peut signaler plusieurs processus tels quekillall
, mais peut également utiliser des critères de sélection avancés pouvant inclure toute combinaison de:Command UID Parent Terminal
la source