Quelle est la différence entre 'killall' et 'pkill'?

88

Après avoir utilisé simplement kill <some_pid> sur les systèmes Unix pendant de nombreuses années, j'ai appris que pkill était issu d'un collègue plus expérimenté .

J'ai rapidement accepté la méthode Linux, pgrep -ing et pkill -ing sur plusieurs jours et nuits, à travers des ralentissements et des conditions de course. C'était très bien.

Mais maintenant je ne vois rien d'autre que killall . Les méthodes semblent ne mentionner que killall , et je ne suis pas sûr qu'il s'agisse d'un développement parallèle, ou si killall est un successeur de pkill , ou autre chose.

Il semble fonctionner comme un pkill plus ciblé, mais je suis sûr que je manque quelque chose.

Une personne Ubuntu / Debian-savvy 2 peut-elle expliquer quand (ou pourquoi) killall doit être utilisé, en particulier si elle doit être utilisée de préférence à pkill (lorsque pkill souvent semble plus facile, car je peux être plus lent avec la correspondance de noms, du moins par défaut).

En parlant de killall , je ne pense pas à la commande qui sur certains systèmes Unix (Solaris, AIX,?) pourrait tuer tous les processus utilisateur. Voici une description de cette version, à partir de une page de manuel pour IBM AIX :

  

La commande killall annule tout   processus que vous avez démarré, sauf   ceux qui produisent le processus de destruction.   Cette commande fournit une   moyens d'annuler tous les processus   créé par le shell que vous contrôlez.   Lorsqu'il est démarré par un utilisateur root, le   commande killall annule tout   processus résiliables sauf ceux   processus qui l'a démarré. Si plusieurs   Les signaux sont spécifiés, seulement le dernier   l'un est efficace.

1 'collègue' est une mise à jour gratuite de 'co-worker', aussi bien.
2 À l'origine, je pensais que c'était une chose Linux ou Debian , mais certaines sources disent que Linux killall est dérivé de Unix à saveur BSD.

    
posée belacqua 22.02.2011 - 08:31
la source

4 réponses

64

Je pense que vous voyez killall dans les procédures car, par défaut, il requiert un nom de processus précis, alors que pkill fait la correspondance de base avec les modèles. Ainsi, killall est plus sûr pour les utilisateurs de copier-coller aveuglément.

Pkill et killall ont tous deux des options distinctes. Killall a un drapeau pour correspondre à l'âge du processus, pkill a un drapeau pour ne tuer que les processus sur un tty donné. Etcetera ad nauseum. Ce n’est pas meilleur non plus , ils ont juste des spécialités différentes.

Je vois sur leurs pages de manuel que killall provient du paquet psmisc , qui comporte plusieurs utilitaires de gestion de processus, mais qui ne contient ps . Il s'agit du package procps contenant, entre autres, ps, top, kill et pkill. Je parie que Procps n'avait pas à l'origine pkill, donc psmisc a démangé et est venu avec killall.

La page de manuel pkill / pgrep indique qu’elle a été introduite dans Solaris 7. Comme vous le mentionnez, jgbelacqua , le killall de Solaris n’était pas l’utilitaire fourni par psmisc, ainsi Solaris n’avait probablement que le paquet procps. Quelqu'un voulait un outil de processus de correspondance de modèle, donc pkill et pgrep. Que ce soit développé par le dev dev ou ajouté par la suite, je ne sais pas. Quoi qu’il en soit, il a été intégré et a fait partie de * nixes partout.

Plus de sources:

réponse donnée djeikyb 22.02.2011 - 09:06
la source
7

S'il vous plaît soyez prudent avec "killall". Sur certains systèmes (j'oublie lequel), killall tue tous les processus tous les . Il ignore silencieusement les arguments et interrompt complètement votre système.

    
réponse donnée phessler 30.07.2012 - 10:26
la source
3

si vous activez / etc / bash_completion, après killall <part_of_process_name> et cliquez sur l'onglet - auto complète le nom du processus à partir de la liste des processus en cours d'exécution

    
réponse donnée jet 22.02.2011 - 13:28
la source
2

Si vous regardez les options des deux programmes, vous verrez qu’ils agissent tous deux de la même manière, mais de différentes manières.

pkill effectuera la correspondance sur différents attributs d'un processus (CMD, PID, PPID, UID ...) et enverra le signal donné à chaque processus correspondant. (Pour CMD, une expression régulière est utilisée, pour d’autres une chaîne). pkill n'est pas interactif, mais meilleur pour les programmes par lots.

killall effectuera la correspondance sur le nom du processus (comm) ou l'utilisateur (utilisateur), pas sur la chaîne de commande entière. L'argument est utilisé comme une simple chaîne et doit correspondre à la totalité de la valeur «comm» (il existe également une option --regexp pour changer cela). killall a --interactif et --younger-que les options, que pkill n'a pas.

Il existe également un killall5 issu des jours SysV et porté sur d’autres variantes UNIX (supposément sous le paquet Ubuntu 'sysutils'). Cela se comporte différemment à l'ancienne. Cela a souvent été utilisé en interne pour les scripts d'initialisation pour arrêter ou passer en mode mono-utilisateur.

    
réponse donnée Arcege 22.02.2011 - 14:24
la source

Lire d'autres questions sur les étiquettes