GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Init-Prozess:Urahn aller Prozesse?

Ich habe immer gelernt, dass der Init-Prozess der Vorfahre aller Prozesse ist. Warum hat Prozess 2 eine PPID von 0?

$ ps -ef | head -n 3
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May14 ?        00:00:01 /sbin/init
root         2     0  0 May14 ?        00:00:00 [kthreadd]

Akzeptierte Antwort:

Erstens ist „Vorfahre“ nicht dasselbe wie „Elternteil“. Der Vorfahre kann der Elternteil des Elternteils sein … der Elternteil des Elternteils, und der Kernel verfolgt nur eine Ebene.
Wenn jedoch ein Prozess stirbt, werden seine Kinder von init übernommen, sodass Sie viele Prozesse sehen werden, deren Elternteil ist 1 auf einem typischen System.

Moderne Linux-Systeme haben zusätzlich ein paar Prozesse, die Kernel-Code ausführen, aber von der Zeitplanung her als Benutzerprozesse verwaltet werden. (Sie befolgen nicht die üblichen Speicherverwaltungsregeln, da sie Kernel-Code ausführen.) Diese Prozesse werden alle von kthreadd erzeugt (es ist die Initialisierung von Kernel-Threads). Sie erkennen sie an ihrer übergeordneten Prozess-ID (2) oder normalerweise daran, dass ps listet sie mit einem Namen in eckigen Klammern auf oder durch die Tatsache, dass /proc/2/exe (normalerweise ein symbolischer Link zur ausführbaren Datei des Prozesses) kann nicht gelesen werden.

Prozesse 1 (init ) und 2 (kthreadd ) werden beim Booten direkt vom Kernel erstellt, haben also kein übergeordnetes Element. Der Wert 0 wird in ihrem ppid-Feld verwendet, um dies anzuzeigen. Stellen Sie sich 0 hier als „den Kernel selbst“ vor.

Linux hat auch einige Möglichkeiten für den Kernel, Benutzerprozesse zu starten, deren Standort unter bestimmten Umständen über einen sysctl-Parameter angegeben wird. Beispielsweise kann der Kernel Modulladeereignisse auslösen (z. B. wenn neue Hardware entdeckt wird oder wenn einige Netzwerkprotokolle zum ersten Mal verwendet werden), indem er das Programm in kernel.modprobe aufruft sysctl-Wert. Wenn ein Programm einen Kern ausgibt, ruft der Kernel das durch kernel.core_pattern angegebene Programm auf falls vorhanden.


Linux
  1. Linux – ein „Subreaper“-Prozess?

  2. Linux – Warum kann der Kernel Init nicht ausführen?

  3. Verwalten von Prozessen in Ubuntu Linux

  4. Was ist die aktuelle Linux-Kernelquelle?

  5. Linux verfolgt alle Dateien, auf die der Prozess zugreift?

So listen Sie laufende Prozesse in Linux auf

Ps-Befehl in Linux (Prozesse auflisten)

So beenden Sie Zombie-Prozesse in Linux

Prozessüberwachung unter Linux

Befehle für das Prozessmanagement in Linux

So senden Sie Prozesse unter Linux an den Hintergrund