Quelle est la différence entre kill, pkill et killall

31

Je connais la killcommande, et la plupart du temps nous utilisons simplement kill -9 pour tuer un processus avec force, il y a beaucoup d'autres signaux qui peuvent être utilisés avec kill. Mais je me demande quels sont les cas d'utilisation de pkillet killall, s'il existe déjà une commande kill.

Faire pkillet killallutiliser la killcommande dans leur implémentation? Je veux dire qu'ils ne sont que des wrappers killou qu'ils ont leur propre implémentation?

Je voudrais également savoir comment la pgrepcommande obtient l'ID de processus à partir du nom de processus.

Toutes ces commandes utilisent-elles les mêmes appels système sous-jacents? Y a-t-il une différence du point de vue des performances, laquelle est la plus rapide?

Ijaz Ahmad Khan
la source
2
Deux choses: pourquoi utiliser kill -9par défaut? -15 (s'il vous plaît arrêter) et -1 (le modem a raccroché, veuillez vous fermer proprement) sont beaucoup plus polis. Deuxièmement. Méfiez-vous de l'utilisation de killall sur les boîtiers non linux. Il pourrait se comporter différemment. (Par exemple, sur Solaris, il tue tout. NON FILTRÉ sur les noms de processus).
Hennes

Réponses:

31

La killcommande est un wrapper très simple pour l' kill appel système , qui ne connaît que les ID de processus (PID). pkillet killallsont également des wrappers pour l' kill appel système (en fait, pour la bibliothèque libc qui appelle directement l'appel système), mais peuvent déterminer les PID pour vous, en fonction de choses comme le nom du processus, le propriétaire du processus, l'ID de session, etc.

Comment pkillet killalltravail peuvent être vus en utilisant ltraceou stracesur eux. Sous Linux, ils lisent tous les deux le /procsystème de fichiers et, pour chaque pid (répertoire) trouvé, parcourent le chemin de manière à identifier un processus par son nom ou d'autres attributs. La façon dont cela est fait est techniquement parlant, propre au noyau et au système. En général, ils lisent /proc/<PID>/statce qui contient le nom de la commande comme 2ème champ. Pour pkill -fet pgrepexaminez l' /cmdlineentrée pour chaque entrée de proc de PID.

pkillet pgreputiliser l' readprocappel système, alors killallque non. Je ne pourrais pas dire s'il y a une différence de performances: vous devrez le comparer vous-même.

Otheus
la source
2

kill et killall sont des outils qui permettent de tuer un processus. Le premier par son PID, le second par son nom. pgrep (liste) et pkill (kill par défaut) sont des outils qui permettent d'envoyer un message à un processus par son nom ou d'autres attributs voir: http://linux.die.net/man/1/pkill Pour plus d'informations sur signaux: http://linux.die.net/man/7/signal

dervishe
la source
Voulez-vous dire killallest utilisé pour tuer un processus par son nom? et il utilise pgrep à cet effet? et killalltue également tous les processus enfants,? quel signal killallutilise par défaut?
Ijaz Ahmad Khan
3
... sauf si vous êtes sur Solaris, auquel cas tous les processus que vous avez le droit de tuer killallseront tués , de sorte que si vous êtes root, vous redémarrez efficacement le serveur.
Jenny D
1
yep: killall chromiumtuera le processus de chrome, pgrep chromiumvous donnera la liste PID, pkill chromiumtuera le chrome. killall enverra par défaut le signal SIGTERM (comme pkill)
dervishe