Comment systemd survit-il à un kill -9?

28

Entre les récentes questions «Pourquoi la mise à mort -9 0 met-elle fin à ma session de console» et «Comment faire pour paniquer le noyau», j'ai eu une fraise sous ma selle et j'ai essayé kill -9 1un ordinateur portable Arch linux pour la plupart à jour. Je l'ai fait en tant qu'ID utilisateur "root".

Je m'attendais pleinement à une sorte de plantage, de panique ou d'arrêt, mais rien ne s'est produit. Je l'ai fait à kill -9 1nouveau, sans effet.

Les machines Linux Arch fonctionnent systemdces jours-ci, alors: comment systemdsurvit à un kill -9? Je m'attends à ce qu'il y ait un code de cas particulier dans le noyau Linux 3.7, mais il existe peut-être une autre raison à laquelle je n'ai pas pensé.

Qu'en est-il des autres choses qui fonctionnent avec PID 1? initJe pense que Slackware utilise toujours , mais j'ai peur de l'essayer sur mon serveur Slackware de production. DD-WRT sur mon routeur sans fil exécute / sbin / init d'une sorte.

Bruce Ediger
la source

Réponses:

33

De man 2 kill:

Les seuls signaux pouvant être envoyés à l'ID de processus 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.

Autrement dit, il est possible initde faire ce qu'il veut à la réception SIGKILL(y compris en quittant), mais l'initialisation de systemd n'installe aucun gestionnaire de signal pour cela, donc rien ne se passe.

Chris Down
la source
4
Merci de l'avoir noté. Est-ce spécifique à Linux? Je me souviens avoir fait planter une station de travail SunOS au début des années 90 en tuant init par erreur. Ou pas. J'étais beaucoup plus téméraire dans ma jeunesse.
Bruce Ediger
1
@BruceEdiger, il me semble aussi que je me souviens avoir pu kill -9 initet provoquer une panique du noyau. On dirait que ça a changé à un moment donné.
psusi
2
@BruceEdiger - Je l'ai essayé pour un serveur AIX et un serveur HP-UX. Les deux ont renvoyé un message d'erreur: kill: 1: 0403-068 Le signal n'est pas valide pour ce processus OU kill: 1: le processus spécifié n'existe pas. La page de manuel mentionnait spécifiquement que cela retournerait une erreur. Un certain nombre de personnes m'ont dit que cela pouvait être fait auparavant - mais personne n'a réussi au cours des 10 dernières années.
DarkHeart
2
@BruceEdiger Il semble, d'après certaines recherches, qu'il s'agit d'un développement récent (du moins en termes de durée de vie Unix). Malheureusement, je n'étais pas vivant au début des années 90, alors quand c'est arrivé, c'est hors de mes connaissances. Il serait intéressant de le savoir, car il semble que presque tous les Unices modernes ont changé pour adopter ce comportement par défaut.
Chris Down