Interprozesskommunikation (IPC)
Einführung
Normalerweise haben Prozesse voneinander getrennte Daten-Bereiche. Die
Kommunikation zwischen Prozesses ist etwas umstänlich, da ein
Prozeß gerade durch seine Eigenständigkeit von anderen
Prozessen hervorsticht.
Es gibt mehrere Möglichkeiten, IPC zu realisieren:
- Signale
- Gemeinsame Datei
- Pipes
- SysV Semaphoren/Shared-Memory/Message-Queues
- Berkeley Sockets
Eine Ausführliche Behandlung der IPC befindet sich in
man perlipc. Sie können auch
die Kapitel über Signale,
Prozesse und
Client/Server (Sockets) konsultieren.
Signale
Signale sind nur eine sehr eingeschränkte und
unzuverlässige Form der IPC. Sie kann, wie der Name es auch andeutet,
nur für primitivste Signalisierungszwecke eingesetzt werden.
Gemeinsame Datei
Eine häufig benutzte Methode: Ein Prozess schreibt etwas in eine
Datei, und ein anderer Prozeß liest aus dieser Datei.
Beim gemeinsamen Zugriff auf eine Datei kann eine
race condition entstehen: Es werden also Sperren
benötigt: Siehe hierzu
flock()
(lokale Sperren) und
fcntl()
(NFS-weite Sperren).
Pipes
Es gibt zwei sorten von Pipes:
- durch
pipe()
erzeugte Pipes
- Named Pipes, auch FIFOs genannt.
Nicht unerwähnt bleiben soll, daß Sie Pipes von und
zu Programmen mit der
open()
Funktion öffnen können. Siehe hierzu auch das
I/O Kapitel, sowie unter
man perlipc (
Using open() for IPC,
Safe Pipe Opens und
Bidirectional Communication).
Mehr darüber mündlich im Kurs.
SysV IPC
UNIX System V hat folgende IPC-Methoden eingeführt:
- Shared Memory mit der
shm* Library
- Semaphoren mit der
sem* Library
- Message Queues mit der
msg* Library
Alle diese Libraries sind auch in Perl vorhanden (vorausgesetzt, Ihr
System verfügte über diese Libraries als Perl
konfiguriert und kompiliert wurde). Wer C's Version dieser Funktionen
kannte, wird angenehm überrascht: Die Schnittstelle ist etwas
einfacher geworden.
Eine Erläuterung der entsprechenden API finden Sie in
man perlipc.
Sockets
Sockets werden im nächsten Kapitel
behandelt.
Vorherige Seite,
Nächste Seite,
Index,
Hauptindex.
Copyright © 1997/08/16 by
Farid Hajji.