|
|
![]()
Signale stellen die primitivste Art der Kommunikation zwischen 2 Prozessen da. Mit den
Signalfunktionen alleine ist natürlich noch keine Interprozesskommunikation (IPC) möglich.
Erst mit der Funktion kill() kann ein Prozess dem Anderen ein Signal schicken. Der
Prozess kann anschließend dementsprechend reagieren. Allerdings werden Signale äußerst selten
als IPC's verwendet. Wollen wir uns doch mal bildlich ansehen wie das Funktionieren
könnte. Wie wollen mit fork einen 2.Prozeß kreieren. Beide Prozesse (Eltern und Kind)
sollen anschließend abwechseln eine Ausgabe auf dem Bildschirm (STDOUT_FILENO) machen (anstatt dem Bildschirm können sie natürlich auch eine Datei verwenden). Folgendermaßen gehen wir dabei vor....
Der Kindprozess wird in einem Wartezustand versetzt und der Elternprozess schreibt etwas
auf dem Bildschirm.
Der Elternprozess schickt dem Kindprozess ein Signal mittels kill() und der Elternprozess
wird in einem Wartezustand versetzt.
Der Kindprozess ist dran mit dem Schreiben auf dem Bildschirm.
Nun sendet der Kindprozess dem Elternprozess ein Signal mittels kill() und der Kindprozess
befindet sich wieder in einem Wartezustand.
Ich habe in diesem Programmbeispiel auf Fehlerausgaben verzichtet. Sollten sie also wirklich vorhaben Signale zur Kommunikation zwischen 2 Prozessen zu verwenden so sollten sie dies als letzte Alternative verwenden. Denn sollten 2 Signale in zu kurzen Zeitabständen eintreffen, während der Signalhandler aktiv ist, kann es passieren das einige Signale dabei verloren gehen.
![]() |