web-dev-qa-db-fra.com

Qu'est-ce que le processus kthreadd et les enfants et en quoi il diffère de init et des enfants

Je voulais savoir ce qu'est kthread et pourquoi il ne prend pas de mémoire et n'a pas de fichiers ouverts. J'ai écrit du code qui imprimera simplement le PID des processus en cours d'exécution dans un format d'arborescence enfant parent avec quelques informations supplémentaires comme VMZ, RSS, threads, openfiles. Tous les enfants du PID 2 nommés kthreadd n'avaient pas le VmSize et le VmRSS dans le /proc/[pid]/status fichier. les /proc/[pid]/fd ne contient aucun fichier ouvert.

Quels sont ces processus, comment ils sont différents des processus normaux engendrés par init (PID 1). J'ai lu (dans un vieux livre) que le swapper engendrera init PID1 et tous les autres processus sont des enfants de PID 1. Il y a certainement une architecture différente derrière cela (noyau Linux 3.7.10.1-16) que je ne connais pas, donc une autre question est de savoir pourquoi le PID 2 est un enfant du PID 0 et n'est pas un enfant du PID 1.

26
phoxis

Les threads du noyau ne sont pas des enfants d'init car ils peuvent être démarrés avant tous les processus de l'espace utilisateur.

Ils sont généralement utilisés pour gérer le matériel, c'est pourquoi ils sont directement gérés par le noyau et ont une priorité élevée.

Pour qu'un processus soit enfant d'init, il doit être cloné à partir d'init et Kthreads ne sont pas pour cela que leur PID parent est 0 signifiant "personne".

33
MSI