GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – Un processus « subreaper » ?

Le mot « subreaper » est utilisé dans certaines réponses. La recherche sur Google fait également apparaître des entrées où le mot est "juste utilisé".

Comment puis-je comprendre ce qu'est un "sous-moissonneur" ?

Réponse acceptée :

Cela a été implémenté dans le noyau Linux 3.4 en tant qu'indicateur de l'appel système prctl().

Depuis le prctl(2) page de manuel :

[…] Un subreaper remplit le rôle de init(1) pour ses processus
descendants. À la fin d'un processus orphelin (c'est-à-dire que
son parent immédiat s'est déjà terminé) et marqué comme ayant un
sous-moissonneur, le sous-moissonneur ancêtre encore vivant le plus proche recevra un SIGCHLD signaler et pouvoir wait(2) sur le processus pour découvrir
son statut de résiliation.

Un processus peut se définir comme un sous-moissonneur avec prctl(PR_SET_CHILD_SUBREAPER) . Si oui, ce n'est pas init (PID 1) qui deviendra le parent des processus enfants orphelins, à la place, le grand-parent vivant le plus proche marqué comme sous-moissonneur deviendra le nouveau parent. S'il n'y a pas de grand-parent vivant, init fait.

La raison d'implémenter ce mécanisme était que les gestionnaires/superviseurs de service de l'espace utilisateur (comme upstart , systemd ) doivent suivre leurs services démarrés. De nombreux services se diabolisent en double-forking et sont implicitement re-parentés au PID 1. Le gestionnaire de services ne pourra plus recevoir le SIGCHLD signaux pour eux, et n'est plus en charge de récolter les enfants avec wait() . Toutes les informations sur les enfants sont perdues au moment où le PID 1 nettoie les processus reparentés. Désormais, un processus de gestionnaire de services peut se marquer lui-même comme une sorte de "sous-init" et peut désormais rester le parent de tous les processus orphelins créés par les services démarrés. Tous SIGCHLD les signaux seront transmis au gestionnaire de service.

Sous Linux, un démon est généralement créé en bifurquant deux fois, le processus intermédiaire se terminant après avoir bifurqué le petit-enfant. Il s'agit d'une technique courante pour éviter les processus zombies. Le script init appelle un enfant. Cet enfant bifurque à nouveau et sort donc immédiatement. Le petit-enfant sera adopté par init , qui appelle continuellement wait() pour recueillir le statut de sortie de ses enfants pour éviter les zombies. Avec le concept de subreapers, le gestionnaire de service de l'espace utilisateur devient maintenant le nouveau parent, au lieu de init .


Linux
  1. Comment installer vtop sur Linux

  2. Linux - Bloquer l'accès réseau d'un processus ?

  3. Linux – Init Process :ancêtre de tous les processus ?

  4. Introduction aux threads Linux – Partie I

  5. Processus de démarrage Linux

Comment tuer un processus sous Linux

Commande Ps sous Linux (liste des processus)

Commande Pstree sous Linux

Commande Kill sous Linux

Surveillance des processus sous Linux

Comment tuer un processus sous Linux