Page de manuel de Bash: kill <pid> vs kill -9 <pid>

25

Ma page de manuel ne documente pas la différence entre

kill <pid>

et

kill -9 <pid>

Étant donné que cela fait des choses différentes, pourquoi le -9 n'est pas documenté dans la killpage de manuel? Je pensais que c'était peut-être des choses spécifiques au shell, donc j'ai aussi regardé la page de manuel bash mais pas de chance.

Question bonus: que fait le -9?

sixtyfootersdude
la source

Réponses:

40

killenvoie juste un signal au processus donné. Le lui -9indique quel signal envoyer.

Des nombres différents correspondent à différents signaux communs. SIGINT, par exemple, est 2, donc pour envoyer un processus, le SIGINTsignal émet la commande

$ kill -2 <pid>

La page de manuel ici précise:

Le signal par défaut pour kill est TERM.

La page de manuel fournit également un tableau des signaux que vous pouvez envoyer. Selon ce tableau, TERMest 15, donc ce sont tous équivalents:

kill <pid>
kill -15 <pid>
kill -TERM <pid>

L'avis 9 est le KILLsignal.

   Name   Number  Action
   -----------------------
   ALRM      14   exit
   HUP        1   exit
   INT        2   exit
   KILL       9   exit  this signal may not be blocked
   PIPE      13   exit
   POLL           exit
   PROF           exit
   TERM      15   exit     [Default]
   USR1           exit
   USR2           exit
   VTALRM         exit
   STKFLT         exit  may not be implemented
   PWR            ignore    may exit on some systems
   WINCH          ignore
   CHLD           ignore
   URG            ignore
   TSTP           stop  may interact with the shell
   TTIN           stop  may interact with the shell
   TTOU           stop  may interact with the shell
   STOP           stop  this signal may not be blocked
   CONT           restart   continue if stopped, otherwise ignore
   ABRT       6   core
   FPE        8   core
   ILL        4   core
   QUIT       3   core
   SEGV      11   core
   TRAP       5   core
   SYS            core  may not be implemented
   EMT            core  may not be implemented
   BUS            core  core dump may fail

   XCPU           core  core dump may fail
   XFSZ           core  core dump may fail
Mark Pim
la source
8
Le signal par défaut ( kill <pid>) est TERM.
Heavyd
9
Les nombres sont généralement, mais pas toujours, les mêmes sur différents systèmes basés sur Unix. Il est préférable d'utiliser le nom du signal. Autrement dit, au lieu de tuer -9, utilisez kill -KILL.
mpez0
7
J'ajouterais que les signaux KILLet STOPsont des signaux dits non capturables. Cela signifie que lorsqu'un TERMsignal est envoyé à un processus, il est capable de l'attraper et d'effectuer diverses opérations "d'arrêt" qu'il doit effectuer. Le KILLsignal arrête immédiatement le processus.
Neo
5
Il est préférable d'utiliser d'abord le signal par défaut et d'utiliser uniquement -9 si la valeur par défaut ne fonctionne pas. La raison en est que -9 ne peut pas être intercepté, le programme n'a donc aucune chance de faire le nettoyage. Vous trouverez également la documentation des signaux sur votre système dansman 7 signal
pause jusqu'à nouvel ordre.
7

Le signal par défaut est TERM qui permet au programme en cours de suppression de l'attraper et de faire un nettoyage avant de quitter. Un programme peut également l'ignorer s'il est écrit de cette façon.

Spécifier -9 ou KILL comme signal ne permet pas au programme de l'attraper, de faire un nettoyage ou de l'ignorer. Il ne doit être utilisé qu'en dernier recours.

Pour voir la liste des nombres et des noms de signaux dans Bash, utilisez kill -l(lettre ell).

En pause jusqu'à nouvel ordre.
la source
4

J'utilise Ubuntu Linux.

Les commandes Kill envoient essentiellement un signal au processus pour y mettre fin. Pour simplifier les attentes comportementales complexes de l'informatique de tous les jours, la commande kill comporte diverses options.

Comme expliqué ci-dessus avec toutes les options de numéros de kill correspondant à sa définition.

Je voudrais y ajouter quelques lignes.

 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

Comme vous le voyez ci-dessus, ce sont toutes des options de suppression que vous obtiendrez si vous exécutez Ubuntu Linux.

Mais certains signaux d'arrêt sont communs à toutes les versions * NIX.

kill -9 est l'option SIGKILL et le noyau ne peut pas ignorer ce signal, ce qui signifie qu'il doit honorer cette option -9 ou SIGKILL et quitter le processus immédiatement. N'oubliez pas que ce processus ne peut pas être géré par les programmes d'application.

kill -15, d'autre part, enverra un signal SIGTERM, ce qui signifie qu'il attendra que le processus s'arrête proprement avant de quitter. Il s'agit du signal par défaut.

irfan
la source