Je reçois beaucoup de messages mitigés de la part des gens et je me demandais s'il n'y avait vraiment pas beaucoup de différence dans ce que vous utilisez.
kill 'x'
killall 'x'
kill -9 'x'
Ce sont quelques options que l'on m'a dit d'utiliser jusqu'à présent, mais certaines personnes disent que tuer -9 est juste exagéré, tuer en soi ne fonctionne pas, etc.
Quelqu'un a-t-il des conseils sur celui qui devrait être utilisé dans le cas le plus standard de simplement mettre fin à un processus (et donc à son état également)?
[edit] Je cherche ce qu'il faut utiliser lorsque vous voulez arrêter l'exécution de votre processus afin que vous puissiez en exécuter un nouveau, frais dès le début
SIGKILL
.kill -l
et pour traduire un numéro en son nom de signal correspondant, par exemplekill -l 9
, reviendraKILL
.Réponses:
Il existe un certain nombre de signaux dont la disposition par défaut est de mettre fin au processus. Le signal de terminaison ultime est SIGKILL car il ne peut pas être géré et le processus n'a d'autre choix que de mourir. Cependant, cela signifie également que si vous l'envoyez, le processus est privé de toute possibilité de nettoyage. Par conséquent, les bonnes manières nécessitent d'envoyer un signal comme SIGTERM qui peut être traité en premier et uniquement si le processus ne se termine pas après un certain temps, envoyez-le SIGKILL.
Notez que SIGINT et SIGQUIT ne sont pas de bons candidats pour l'arrêt de processus arbitraire. Étant donné qu'ils peuvent être générés à partir du clavier du terminal, de nombreuses applications les utilisent à des fins spéciales. Par exemple, l'interpréteur python utilise SIGINT pour générer une
KeyboardInterrupt
exception (également dans les sessions python interactives où il revient simplement à l'invite) et JVM utilise SIGQUIT pour vider les traces de pile. SIGINT et SIGQUIT restent efficaces pour la plupart des utilitaires de ligne de commande standard commefind
oucat
.Pendant l'arrêt du système, la plupart des systèmes UNIX et Linux envoient SIGTERM à tous les processus, suivi d'une attente de 5 secondes, suivi de SIGKILL. Il s'agit de la méthode recommandée pour arrêter en toute sécurité un processus arbitraire.
Notez également que même SIGKILL peut ne pas terminer un processus bloqué dans une attente ininterrompue jusqu'à ce que le processus se réveille.
la source
kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;
recommandation?SIGHUP
vient du jour où les lignes commutées étaient courantes. Ce signal a été envoyé pour indiquer que la ligne a raccroché. Plus tard, lorsque cela était moins courant, ilSIGHUP
était parfois utilisé par les démons pour relire le fichier de configuration sans redémarrer le processus. Dans ces temps modernesSIGHUP
est rarement utilisé. De nombreux démons auront leur propre façon de réinitialiser (c.-àapachectl graceful
-drndc reconfig
. , Ou . Pour les choses qui ne le sont pas, vous devriez utiliser des[init.d|smf|upstart|launchd]
contrôles si possible.Vous devriez commencer par la plus douce et dégénérer à partir de là. Cela signifie, SIGINT, SIGTERM, SIGQUIT, SIGKILL. Bien que la plupart des gens sautent SIGINT et SIGQUIT.
la source