web-dev-qa-db-fra.com

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

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

pkill et killall utilisent-ils la commande kill dans leur implémentation? Je veux dire qu'ils ne sont que des wrappers sur kill ou qu'ils ont leur propre implémentation?

Je voudrais également savoir comment la commande pgrep obtient l'identifiant du processus à partir du nom du 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?

35
Ijaz Ahmad Khan

La commande kill est un wrapper très simple pour le killappel système, qui ne connaît que les ID de processus (PID). pkill et killall sont également des wrappers à killappel système, (en fait, à la bibliothèque libc qui appelle directement l'appel système), mais peut 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.

Le fonctionnement de pkill et killall peut être vu en utilisant ltrace ou strace dessus. Sous Linux, ils lisent tous les deux le /proc le système de fichiers, et pour chaque pid (répertoire) trouvé, parcourt 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 de /proc/<PID>/stat qui contient le nom de la commande comme deuxième champ. Pour pkill -f et pgrep examinent le /cmdline entrée pour l'entrée de proc de chaque PID.

pkill et pgrep utilisent l'appel système readproc, contrairement à killall. Je ne pourrais pas dire s'il y a une différence de performances: vous devrez le comparer vous-même.

35
Otheus

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 les signaux: http://linux.die.net/man/7/signal

2
dervishe