Re: OT: Out of Memory killer

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Fri, 18 Nov 2005 19:45:23 +0100 (CET)

Marian Hettwer <MH(at)kernel32.de> wrote:
> Oliver Fromme wrote:
> > [...]
> > Aber jedenfalls nicht init(8), wie in dem Linux-Beispiel.
> > Das wäre nun wirklich ziemlich bekloppt. :-)
>
> sehr richtig. Aber schön, daß der Kernel danach noch die Möglichkeit
> hatte andere Sachen zu killen.

Warum auch nicht. Dazu braucht er ja init(8) nicht.

> Überschätze ich grade init(8) oder sollte
> das an sich nicht gehen? :)

Du überschätzt init(8). Bei init handelt es sich eigent-
lich um einen ganz normalen Userland-Prozeß (kein Teil des
Kernels). Er hat halt zufällig das Privileg, der erste zu
sein, daher hat er die PID 1. Ganz grob umrissen handelt
es sich um einen Daemon, der als root läuft und der die
folgenden Aufgaben erfüllt:

 - Wenn in den Single-user-Modus gegangen wird, macht er
   eine root-Subshell auf.

 - Wenn in den Multi-user-Modus gegangen wird, führt er das
   Skript /etc/rc aus und startet anschließend die Program-
   me, die in /etc/ttys eingetragen sind (z.B. getty). Das
   hat natürlich zur Folge, daß alle anderen Prozesse di-
   rekt oder indirekt Child-Prozesse von init sind.

 - Der vorhergehende Punkt hat zur Folge, daß alle Prozes-
   se, deren Eltern sterben, von init adoptiert werden (als
   ältestem Vorfahren, sozusagen). Daher sorgt init dafür,
   daß diese »Waisen«-Prozesse ihren Exit-Code loswerden,
   damit sie nicht zu Zombies werden.

 - Beim Empfang bestimmter Signale führt es bestimmte Ak-
   tionen durch, siehe die init(8)-manpage.

Das war's so im wesentlichen.

Da allerdings ohne init kein sinnvoller Systembetrieb mög-
lich ist, löst der Kernel eine Panic aus, wenn init aus ir-
gendeinem Grund terminiert. Das merkt der Kernel aller-
dings erst, wenn init das nächstemal geschedulet wird, was
erklärt, wieso in dem Linux-Beispiel nach init auch noch
andere Prozesse gekillt wurden und sogar ein getty noch
seine Login-Meldung produzieren könnte. (Es kann aber auch
sein, daß Linux die »init died«-Panic nicht hat -- so genau
kenne ich mich mit Linux-Interna nicht aus.)

Übrigens: Auf den FreeBSD-Installations-Medien (CDs, DVDs,
Floppies) ist gar kein init(8) drauf. Dort übernimmt statt-
dessen sysinstall(8) die Rolle von init (und hat dort folg-
lich die PID 1).

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing
Dienstleistungen mit Schwerpunkt FreeBSD: http://www.secnetix.de/bsd
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"I have stopped reading Stephen King novels.
Now I just read C code instead."
        -- Richard A. O'Keefe
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 18 Nov 2005 - 19:46:46 CET

search this site