Erstens ist "Vorfahr" nicht dasselbe wie "Eltern". Der Vorfahr kann der Elternteil des Elternteils sein, und der Kernel verfolgt nur eine Ebene. Wenn ein Prozess jedoch stirbt, werden seine untergeordneten Elemente von init übernommen, sodass auf einem typischen System viele Prozesse angezeigt werden, deren übergeordnetes Element 1 ist.
Moderne Linux-Systeme verfügen zusätzlich über einige Prozesse, die Kernel-Code ausführen, aber hinsichtlich der Zeitplanung als Benutzerprozesse verwaltet werden. (Sie halten sich nicht an die üblichen Regeln für die Speicherverwaltung, da sie Kernel-Code ausführen.) Diese Prozesse werden alle von kthreadd
(dem Init von Kernel-Threads) erzeugt. Sie erkennen sie an ihrer übergeordneten Prozess-ID (2) oder in der Regel daran, dass ps
sie mit einem Namen in eckigen Klammern aufgeführt sind oder dass /proc/2/exe
(normalerweise ein symbolischer Link zur ausführbaren Prozessdatei) nicht gelesen werden kann.
Die Prozesse 1 ( init
) und 2 ( kthreadd
) werden beim Booten direkt vom Kernel erstellt, sodass sie kein übergeordnetes Element haben. Der Wert 0 wird in ihrem ppid-Feld verwendet, um dies anzuzeigen. Stellen Sie sich 0 hier als "den Kernel selbst" vor.
Linux verfügt auch über einige Funktionen, mit denen der Kernel Benutzerprozesse starten kann, deren Speicherort unter bestimmten Umständen über einen sysctl-Parameter angegeben wird . Beispielsweise kann der Kernel Ereignisse zum Laden von Modulen auslösen (z. B. wenn neue Hardware entdeckt wird oder wenn einige Netzwerkprotokolle zum ersten Mal verwendet werden), indem er das Programm im kernel.modprobe
Wert sysctl aufruft . Wenn ein Programm einen Speicherauszug erstellt, ruft der Kernel das Programm auf, das durch angegeben kernel.core_pattern
ist.
init
also der "Vorfahr" von allenuser threads
, während[kthreadd ]
der "Elternteil" von allen istkernel threads
, richtig? Danke!kernel.core_pattern
. Auf einem typischen System werden sie nicht angezeigt, da diese Prozesse ihre Arbeit in der Regel schnell erledigen und dann beendet werden.