Le processus root kill init peut-il (processus avec pid 1)? Quelles seraient ses conséquences?
Par défaut, non, ce n'est pas autorisé. Sous Linux (depuis man 2 kill
):
Les seuls signaux pouvant être envoyés au processus ID 1, le processus init, sont ceux pour lesquels init a explicitement installé des gestionnaires de signaux. Ceci est fait pour s'assurer que le système n'est pas arrêté accidentellement.
Pid 1 (init) peut décider de se laisser tuer, auquel cas le "kill" est essentiellement une demande pour qu'il se ferme lui-même. C'est un moyen possible d'implémenter la halt
commande, bien que je ne sache pas init
qu'il en soit ainsi.
Sur un Mac, la suppression launchd
(son signal analogique) avec le signal 15 (SIGTERM) redémarre immédiatement le système, sans avoir à arrêter d'éteindre les programmes en cours d'exécution. Le tuer avec le signal non joignable 9 (SIGKILL) ne fait rien, montrant que la kill()
sémantique de Mac est la même que celle de Linux à cet égard.
Pour le moment, je ne suis pas prêt à expérimenter Et avec init
avec une machine Linux, alors la question de savoir ce que fait Linux avec un SIGTERM devra attendre. init
les projets de remplacement comme Upstart et Systemd étant populaires ces jours-ci, la réponse pourrait être variable.
UPDATE : Sous Linux, init
ignore explicitement SIGTERM, donc il ne fait rien. @jsbillings a des informations sur ce que font Upstart et Systemd.
init
avec un signalSegmentation fault
(SIGSEGV
), ce qui entraînera une panique du noyau:kill -SEGV 1
Le SysV init ignore les signaux SIGKILL ou SIGTERM. Le seul signal qui provoque un changement d'état est SIGPWR, autant que je sache, qui programme un arrêt lié à l'alimentation.
Il semble que Upstart et Systemd ne répondent pas non plus à SIGKILL et, d'après mon test, il semble qu'un SIGTERM provoque la ré-exécution de upstart et de systemd.
Je ne suis pas sûr de savoir ce que les autres répondeurs utilisent, mais je suis à peu près sûr que vous ne pouvez ni tuer -9 (SIGKILL) ni tuer -15 (SIGTERM) init (pid 1). Très probablement, si vous le pouviez, vous auriez une panique dans le noyau car init est sorti de manière inattendue avec un code de sortie non nul, ce qui serait loin d'être idéal. Cela n'arrête pas votre ordinateur et ne le redémarre pas.
la source
Techniquement oui, root peut émettre un SIGKILL à init. Cependant, init diffère de la plupart des autres processus, voire presque tous, en ce sens qu'il est autorisé à intercepter et à ignorer le signal.
Vous pouvez, en gros, tuer init en en émettant une action
kill -TERM 1
qui serait analogue à émettre enhalt
oushutdown
dans cet init transmettra le signal à tous les enfants, essentiellement à tous les autres processus, avant de respecter le signal lui-même.S'il vous plaît noter: l' exécution de cette commande volonté d' éteindre votre système.
Pour la saveur; Un type de processus pouvant "ignorer" un SIGKILL est un processus en sommeil ininterruptible, tel qu'un processus en attente d'E / S. Un tel processus pourrait être trouvé en émettant un
ps axo stat,comm
où les processus avec un statut 'D' sont ininterruptibles.la source
kill -TERM 1
rien ne fera qu'init se re-exécuter sur la plupart des systèmes Linux, et que la seule chose que vous puissiez faire pour qu'un systèmekill -PWR 1
kill -TERM 1
redémarrage provoque définitivement un redémarrage (en passant par l'::shutdown:
entrée et le script associé dans inittab.)Vous pouvez redémarrer le
init
processus. Ceci est utile pour apporter des modificationsinittab
sans avoir à redémarrer.Source: http://www.cyberciti.biz/faq/linux-unix-kill-hup-1-reread-etcinittab-file/
la source
init
je sais que ce signal ne fait pas que le processus redémarre mais se contente de recharger le/etc/inittab
fichier. --- Contrarysystemctl daemon-reexec
fait vraimentsystemd
(init
remplacement sur Linux) à ré-exécuter.sudo kill -INT 1
(interruption) redémarre le système etsudo kill -SEGV 1
, (violation de segmentation) ousudo kill -ABRT 1
(annulation) génère une panique du noyau.note: sudo est requis.
la source
Eh bien, root peut tuer le processus init sous Linux:
Détails:
kill -9 1
ne fonctionne pas:Alors courons
strace
:la source
SIGKILL
àPID1
depuis la fusion de github.com/torvalds/linux/commit/… .Tapez
sudo kill -INT 1
, puis voyez ce qui se passe.la source