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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

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

Nach dem Programmstart <strong>mit</strong> dem Warnhinweis, bitte nicht zu stören, wartet<br />

der Prozeß (beliebig lange) auf die Betätigung der Abbruchtaste. Sobald das<br />

zugehörige Signal SIGINT für den Prozeß anhängig wird, kehrt die sigwait()-<br />

Funktion <strong>mit</strong> dem selektierten SIGINT-Signal zurück.<br />

2.4.4 Signale generieren<br />

Mit den Funktionen alarm(), kill(), raise() <strong>und</strong> abort() kann ein Prozeß<br />

Signale explizit generieren. Die alarm()-Funktion haben wir bereits in den<br />

Beispielen 2.14 <strong>und</strong> 2.15 kennengelernt. Mit Hilfe von alarm() kann sich ein<br />

Prozeß selbst einen Wecker stellen. Ist die Alarmzeit erreicht, generiert das<br />

System für diesen Prozeß das Signal SIGALRM.<br />

#include<br />

<br />

unsigned alarm( unsigned seconds );<br />

Über den Parameter seconds wird festgelegt, wann die Zeitschaltuhr abgelaufen<br />

ist, d. h. nach wievielen Sek<strong>und</strong>en das Signal generiert werden soll.<br />

Jeder Prozeß besitzt allerdings nur eine einzige solche Zeitschaltuhr. Jeder<br />

neue Aufruf von alarm() stellt den Timer neu <strong>und</strong> überschreibt da<strong>mit</strong> unter<br />

Umständen eine vorige Einstellung. Falls der Timer bereits durch einen früheren<br />

Aufruf von alarm() gestellt, aber die Alarmzeit noch nicht erreicht wurde,<br />

liefert die Funktion die verbleibende Zeit in Sek<strong>und</strong>en zurück. Andernfalls<br />

gibt die alarm()-Funktion den Wert 0 zurück. Wird beim Aufruf in seconds<br />

der Wert 0 übergeben, so wird ein zuvor gestarteter Timer abgeschaltet, d. h.<br />

vom System wird nach Ablauf der Zeitspanne kein SIGALRM generiert.<br />

#include<br />

<br />

int kill( pid_t pid, int sig );<br />

Die kill()-Funktion stellt die allgemeinste Form der Signalerzeugung dar.<br />

Mit kill() wird für einen durch pid festgelegten Prozeß (oder eine Prozeßgruppe)<br />

das Signal sig generiert. Im Parameter sig wird entweder eine der<br />

Konstanten aus Tabelle 2.3 oder 0, das sogenannte Null-Signal, übergeben.<br />

Für das Null-Signal wird von kill() lediglich eine Fehlerprüfung vollzogen,<br />

ein Signal wird für den angegebenen Prozeß (oder die Prozeßgruppe) jedoch<br />

nicht erzeugt. Das Null-Signal eignet sich daher bestens dazu, die Gültigkeit<br />

von pid zu verifizieren.<br />

Bei erfolgreicher Ausführung liefert die Funktion den Wert 0 zurück. Andernfalls<br />

ist der Rückgabewert -1 <strong>und</strong> errno zeigt die genaue Ursache des<br />

aufgetretenen Fehlers an.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!