INIT(8)

BEZEICHNUNG
init, telinit - Initialisierung der Prozesssteuerung

ÜBERSICHT
/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/telinit [ -t SEKUNDEN ] [ 0123456sSQqabcUu ]
/sbin/telinit [ -e VAR[=WERT] ]

BESCHREIBUNG

  Init
Init ist der übergeordnete Prozess aller Prozesse. Seine Hauptaufgabe besteht darin, Prozesse aus einem Skript in der Datei /etc/inittab zu erzeugen (siehe auch inittab(5)). Diese Datei hat normalerweise Einträge, die init dazu veranlassen auf jeder Leitung gettys zu erzeugen, auf der sich ein Benutzer einloggen kann. Er steuert auch alle unabhängigen Prozesse, die von einem bestimmten System benötigt werden.

RUNLEVEL
A runlevel is a software configuration of the system which allows only a selected group of processes to exist. The processes spawned by init for each of these runlevels are defined in the /etc/inittab file. Init can be in one of eight runlevels: 0–6 and S or s. The runlevel is changed by having a privileged user run telinit, which sends appropriate signals to init, telling it which runlevel to change to.

Runlevels 0, 1, and 6 are reserved. Runlevel 0 is used to halt the system, runlevel 6 is used to reboot the system, and runlevel 1 is used to get the system down into single user mode. Runlevel S is not really meant to be used directly, but more for the scripts that are executed when entering runlevel 1. For more information on this, see the manpages for shutdown(8) and inittab(5).

Runlevels 7-9 are also valid, though not really documented. This is because "traditional" Unix variants don't use them. In case you're curious, runlevels S and s are in fact the same. Internally they are aliases for the same runlevel.

SYSTEMSTART
Nachdem init im letzten Schritt des Startprozesses aufgerufen wird, sucht es nach der Datei /etc/inittab und sieht nach, ob es dort einen initdefault-Eintrag gibt (siehe inittab(5)). Der Eintrag initdefault bestimmt den Anfangs-Runlevel des Systems. Falls es dort keinen derartigen Eintrag gibt (oder gar keine inittab-Datei existiert), muss der Runlevel in der Systemkonsole eingegeben werden.

Runlevel S or s bring the system to single user mode and do not require an /etc/inittab file. In single user mode, /sbin/sulogin is invoked on /dev/console.

Beim Eintritt in den Einzelbenutzermodus initialisiert init die stty-Einstellungen der Konsolen auf vernünftige Werte. Der »Clocal«-Modus wird gesetzt. Hardware-Geschwindigkeit und Datenflusskontrolle werden nicht geändert.

Beim ersten Eintritt in den Mehrbenutzermodus führt init die boot- und bootwait-Einträge aus, um das Einhängen von Dateisystemen zu erlauben, bevor Anwender sich anmelden können. Dann werden alle Einträge, die zum Runlevel passen, verarbeitet.

Wenn ein neuer Prozess gestartet wird, prüft init zuerst, ob die Datei /etc/initscript existiert. Ist dies der Fall, benutzt es dieses Skript, um den Prozess zu starten.

Jedesmal, wenn ein Kindprozess endet, zeichnet init diesen Umstand und den Grund der Beendigung in /var/run/utmp und /var/log/wtmp auf, sofern diese Dateien existieren.

RUNLEVEL ÄNDERN
Nachdem alle vorgesehenen Prozesse erzeugt worden sind, wartet init darauf, dass ein untergeordneter Prozess endet, ein Stromausfallsignal oder darauf, dass telinit einen Wechsel des Runlevels signalisiert. Wenn eine der drei oben genannten Bedingungen erfüllt ist, untersucht init nochmals die /etc/inittab-Datei. Es können jederzeit neue Einträge zu dieser Datei hinzugefügt werden. Jedoch wartet init immer noch darauf, dass einer der drei oben genannten Bedingungen eintritt. Um eine sofortige Antwort bereitzustellen, können die Befehle telinit Q oder q init aufwecken, um die Datei /etc/inittab erneut zu prüfen.

Falls init sich nicht im Einzelbenutzermodus befindet, und ein Stromausfallsignal (SIGPWR) empfängt, liest es die Datei /etc/powerstatus. Anschließend wird ein Befehl anhand des Inhalts der Datei gestartet:

F(EHLSCHLAG)
    Strom fällt aus, die USV versorgt den Rechner mit Strom. Die powerwait- und powerfail-Einträge werden ausgeführt.

O(K)
    Stromkreis wurde wieder geschlossen, die powerokwait-Einträge werden ausgeführt.

L(OW/niedrig)
    Strom fällt aus und der Ladestand der USV ist niedrig. Die powerfailnow-Einträge werden ausgeführt.

Wenn /etc/powerstatus nicht existiert oder etwas anderes enthält als die Buchstaben F, O oder L, wird Init sich so verhalten, als hätte es den Buchstaben F gelesen.

Usage of SIGPWR and /etc/powerstatus is discouraged. Someone wanting to interact with init should use the /dev/initctl control channel - see the source code of the sysvinit package for more documentation about this.

Falls init die Aufforderung zum Wechsel des Runlevels erhält, sendet es das Warnsignal SIGTERM an alle nicht im neuen Runlevel definierten Prozesse. Dann wartet es fünf Sekunden bevor es diese Prozesse gewaltsam per Signal SIGKILL beendet. Beachten Sie, dass init davon ausgeht, dass diese Prozesse (und ihre Unterprozesse) in der gleichen Prozessgruppe verbleiben, die init ursprünglich für sie erstellt hatte. Wenn Prozesse ihre Gruppenzugehörigkeit andern, werden Sie diese Signale nicht empfangen. Solche Prozesse müssen separat beendet werden.

TELINIT
/sbin/telinit ist mit /sbin/init verknüpft. Es empfängt Argumente aus einem Buchstaben oder init-Signale, um die zugehörige Aktion durchzuführen. Die folgenden Argumente dienen als Direktiven für telinit:

0,1,2,3,4,5 oder 6
    init mitteilen, in den angegebenen Runlevel zu schalten.

a,b,c
    init mitteilen, nur die Einträge in der Datei /etc/inittab zu verarbeiten, die den Runlevel a, b oder c haben.

Q oder q
    init mitteilen, die Datei /etc/inittab erneut zu prüfen.

S oder s
    init mitteilen, in den Einzelbenutzermodus zu wechseln.

U oder u
    init mitteilen, sich selbst erneut (unter Beibehalten des Status) auszuführen. Es kommt zu keiner erneuten Ausführung der Datei /etc/inittab. Der Runlevel sollte einer aus Ss0123456 sein, anderenfalls wird die Anfrage stillschweigend ignoriert.

telinit kann dem init-Prozess mitteilen, wieviel Zeit dieser zwischen dem Senden der Signale SIGTERM und SIGKILL warten soll. Die Vorgabe ist fünf Sekunden, dies kann aber durch die Option -t geändert werden.

telinit -e weist init an die Umgebung für Prozesse zu ändern, die es erzeugt. Das Argument von -e ist entweder in der Form VAR=WERT, was die Variable VAR auf den Wert WERT setzt oder in der FormVAR (ohne Gleichheitszeichen), was die Variable VAR leert.

init kann nur von Benutzern mit geeigneten Rechten aufgerufen werden.

Das Programm init prüft durch auswerten der Prozess-ID, ob es init oder telinit ist. Der echte Prozess von init ist immer 1. Daraus folgt, dass jemand anstelle des Aufrufs telinit auch nur init als Abkürzung benutzen kann.

UMGEBUNGSVARIABLEN
Init setzt folgende Umgebungsvariablen für alle seine Kindprozesse:

PFAD
    /bin:/usr/bin:/sbin:/usr/sbin

INIT_VERSION
    Wie der Name schon sagt. Nützlich, um festzulegen, ob ein Skript direkt von init gestartet werden soll.

RUNLEVEL
    Der aktuelle Runlevel des Systems.

PREVLEVEL
    Der vorherige Runlevel (nützlich nach einer Änderung des Runlevels).

CONSOLE
    Die Systemkonsole. Diese wird tatsächlich vom Kernel vererbt; wenn sie jedoch nicht gesetzt ist, wird init sie als Vorgabe auf /dev/console setzen.

BOOTSCHALTER
Es ist möglich, init eine Reihe von Bootschaltern vom Bootmonitor aus (z.B. LILO) zu übergeben. Init akzeptiert folgende Schalter:

-s, S, single
    Bootet im Einzelbenutzermodus. In diesem Modus wird zuerst die Datei /etc/inittab untersucht und die »rc«-Startskripte werden ausgeführt, bevor die Einzelbenutzer-Shell gestartet wird.

1-5 Runlevel in den gestartet wird.

-b, emergency
    Startet direkt in eine Einzelbenutzer-Shell, ohne irgendwelche anderen Startskripte auszuführen.

-a, auto
    Der LILO-Bootloader fügt das Wort »auto« zur Befehlszeile hinzu, wenn der Kernel mit der Standard-Befehlszeile (ohne Eingriff des Anwenders) gestartet wird. Falls dies gefunden wird, setzt init die Umgebungsvariable »AUTOBOOT« auf »yes«. Beachten Sie, dass Sie die nicht für irgendwelche Sicherheitsmaßnahmen verwenden können - selbstverständlich kann der Anwender »auto« oder »-a« manuell auf der Befehlszeile angeben.

-z xxx
    Das Argument zu -z wird ignoriert. Sie können es benutzen, um die Befehlszeile etwas zu verlängern, damit sie etwas mehr Platz auf dem Stack reserviert. Init kann dann die Befehlszeile derart verändern, dass ps(1) den aktuellen Runlevel anzeigt.

SCHNITTSTELLE
Init listens on a fifo in /dev, /dev/initctl, for messages. Telinit uses this to communicate with init. The interface is not very well documented or finished. Those interested should study the initreq.h file in the src/ subdirectory of the init source code tar archive.

SIGNALE
Init reagiert auf mehrere Signale:

SIGHUP
    Hat die gleichen Auswirkungen wie telinit q.

SIGUSR1
    On receipt of this signals, init closes and re-opens its control fifo, /dev/initctl. Useful for bootscripts when /dev is remounted.

SIGINT
    Normalerweise sendet der Kernel dieses Signal an init, wenn CTRL-ALT-DEL gedrückt wurde. Es aktiviert die Aktion ctrlaltdel.

SIGWINCH
    Der Kernel sendet dieses Signal, falls die KeyboardSignal-Taste gedrückt wurde. Es aktiviert die kbdrequest-Aktion.

KONFORM ZU
Init ist kompatibel zu System-V-Init. Es arbeitet eng mit den Skripten in den Verzeichnissen /etc/init.d und /etc/rc{runlevel}.d zusammen.Falls Ihr System diesem Grundsatz folgt, sollte sich in diesem Verzeichnis eine README-Datei befinden, die erklärt wie diese Skripte funktionieren.

DATEIEN
/etc/inittab
/etc/initscript
/dev/console
/var/run/utmp
/var/log/wtmp
/dev/initctl

WARNUNGEN
Init geht davon aus, dass alle Prozesse und Kindprozesse in der selben Prozessgruppe verbleiben, die ursprünglich für sie eingerichtet wurde. Falls einer dieser Prozesse die Gruppe wechselt, kann init ihn nicht mehr beenden und es kann passieren, dass Sie in einem Zustand landen, in dem zwei Prozesse von einer Terminalzeile Befehle einlesen wollen.

DIAGNOSE
Wenn init herausfindet, dass es kontinuierlich einen Eintrag öfter als zehn mal in zwei Minuten neu erzeugt, wird es annehmen, dass ein Fehler in der Befehlszeile vorliegt, eine Fehlermeldung auf der Befehlszeile erzeugen und sich weigern, den Eintrag auszuführen, bis fünf Minuten vergangen sind oder es ein Signal empfängt. Dieses verhindert, dass Systemressourcen verschwendet werden, wenn jemandem ein Tippfehler in /etc/inittab unterläuft oder das zum Eintrag gehörende Programm gelöscht wird.

AUTOR
Miquel van Smoorenburg (miquels@cistron.nl), ursprüngliche Handbuchseite von Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).

SIEHE AUCH
getty(1), login(1), sh(1), runlevel(8), shutdown(8), kill(1), inittab(5), initscript(5), utmp(5)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Okrslar <okrslar@informatik.uni-muenchen.de>, Martin Schulze <joey@infodrom.org> und Chris Leick <c.leick@vollbio.de> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.