05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

76 2 Programmieren <strong>mit</strong> <strong>Unix</strong>-Prozessen<br />

Erfolgsfall liefert die Funktion den Wert 0 zurück, im Fehlerfall wird ein Wert<br />

ungleich Null zurückgegeben <strong>und</strong> errno gibt Auskunft über die Fehlerursache.<br />

Die abort()-Funktion dient schließlich dazu, den laufenden Prozeß anormal<br />

zu beenden, sofern der Prozeß das Signal SIGABRT nicht abfängt.<br />

#include<br />

<br />

void abort( void );<br />

Mit der Funktion wird für den aktuellen Prozeß das SIGABRT-Signal generiert.<br />

Der Aufruf von abort() ist da<strong>mit</strong> (abgesehen vom Rückgabewert) funktionsgleich<br />

<strong>mit</strong> raise( SIGABRT ).<br />

2.5 Prozeßkontrolle<br />

In Abschnitt 2.1.1 haben wir gelernt, daß unter <strong>Unix</strong> alle Prozesse mehr oder<br />

weniger direkte Nachkommen von einem einzigen Prozeß, dem sogenannten<br />

init-Prozeß sind. Der init-Prozeß wird beim Systemstart vom Betriebssystemkern<br />

erzeugt <strong>und</strong> startet danach entsprechend der Systemkonfiguration<br />

alle weiteren Systemdienste. Diese Dienste starten dann ihrerseits meist wieder<br />

weitere Prozesse, wie z. B. eine Login-Shell.<br />

Jedem Prozeß wird bei seinem Start eine eigene, systemweit eindeutige Prozeß-<br />

ID (PID) zugewiesen. Außerdem läuft jeder Prozeß unter einer bestimmten<br />

User- <strong>und</strong> Group-ID. Welche Zugriffsrechte ein Prozeß besitzt, wird durch<br />

seine effektive User-ID, seine effektive Group-ID sowie die Mitgliedschaft zu<br />

weiteren Gruppen bestimmt.<br />

Fast alle nichttrivialen Netzwerkdienste müssen in der Lage sein, weitere Prozesse<br />

zu starten. Betrachten wir als Beispiel einen Webserver: Der Webserver<br />

liefert für jede Anfrage eines Webbrowsers ein Dokument zurück. Bei den<br />

ausgelieferten Dokumenten kann es sich um Textseiten, Bilder, Filme oder<br />

beliebige andere Inhalte handeln. Mitunter werden diese Dokumente erst zum<br />

Zeitpunkt der Anfrage dynamisch erzeugt, was möglicherweise etwas Zeit in<br />

Anspruch nehmen kann. Da<strong>mit</strong> ein Webserver nun die Anfragen mehrerer<br />

Webbrowser zur gleichen Zeit bearbeiten kann, verteilt er die Arbeit in der<br />

Regel auf mehrere Prozesse. Teilweise arbeiten diese Prozesse für verschiedene<br />

Anfragen die gleichen Codeteile ab, teilweise werden von den Prozessen aber<br />

auch ganz andere Programme (wie z. B. CGI-Programme) angestoßen.<br />

Aus Sicht der Netzwerkprogrammierung stellt sich da<strong>mit</strong> die Frage, wie unter<br />

<strong>Unix</strong> neue Prozesse erzeugt <strong>und</strong> andere Programme gestartet werden können.<br />

Wie <strong>und</strong> unter welchen Umständen kann eine Prozeß seine User- oder Group-<br />

ID ändern, wie <strong>und</strong> wann kann er durch einen Wechsel seiner effektiven Useroder<br />

Group-ID seine Zugriffsrechte erweitern oder einschränken? Unter welcher<br />

(effektiven) UID <strong>und</strong> GID läuft ein Prozeß gerade?

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!