Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Kommunikation von Prozessen Signale und Pipes Alexander Sczyrba

Ähnliche Präsentationen


Präsentation zum Thema: "Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Kommunikation von Prozessen Signale und Pipes Alexander Sczyrba"—  Präsentation transkript:

1 Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Kommunikation von Prozessen Signale und Pipes Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Jan Krüger jkrueger@cebitec.uni-bielefeld.de

2 Center for Biotechnology Bielefeld Bioinformatics Service Kommunikation von Prozessen Parent und Child Prozesse koennen kommunizieren über ● Signale ● Pipes ● Shared Memory

3 Center for Biotechnology Bielefeld Bioinformatics Service Signale ● Technik um Nachrichten an Prozesse zu schicken ● z.B. erzeugt division by zero das Signal SIGFPE ● Prozesse haben 3 Möglichkeiten Signale zu verarbeiten : 1.Ignorieren 2.Default-Aktion ausführen (SIGFPE → Terminierung) 3.Bereitstellung einer Funktio, die für das entsprechende Signal aufgerufen wird (Signalhandler)

4 Center for Biotechnology Bielefeld Bioinformatics Service POSIX Signale (Ausschnitt) T: terminate, C: continue, ! : can't be caught, R: resume, S : stop, C :core dump

5 Center for Biotechnology Bielefeld Bioinformatics Service kill() Perl-Skript kann anderem Prozess mit Hilfe von kill() ein Signal senden : $count = kill ($signal, @processes) ● Sendet Signal $signal an einen oder mehrere Prozesse ● Signal kann numerisch oder symbolisch festgelegt werden ● @processes: Liste eines oder mehrere Prozesse ● Rückgabe: Anzahl der Prozesse an die das Signal erfolgreich versandt wurde

6 Center for Biotechnology Bielefeld Bioinformatics Service Abfangen von Signalen ● Zufügen eines Signalhandlers zu globalen Hash %SIG ● Name des Signal als Hash-Key (z.B. $SIG{INT}) ● Wert ist eine Referenz auf eine Subroutine ● Beachte : keine aufwendigen Funktionen in Signalhandlern

7 Center for Biotechnology Bielefeld Bioinformatics Service Aufgabe(n) 1.Schreibe ein Skript, das endlos alle 5 Sekunden „I'm sleeping.“ ausgibt. 2.Wie kann das Skript terminiert werden ? 3.Erweitere das Skript so das das INT Signal abgefangen wird. Das Program soll nach dem 3. INT Signal terminieren.

8 Center for Biotechnology Bielefeld Bioinformatics Service Pipes ● ursprüngliche Form von Unix Interprocess Communication (IPC) [1973] ● nützlich für viele Operationen ● Nachteil: haben keinen Namen, können daher nur durch verwandte Prozesse genutzt werden ● wurde später [1983] durch Einführung von FIFOs (named pipes) korrigiert ● Pipes und FIFOs werden durch die normalen read und write Funktionen angesprochen

9 Center for Biotechnology Bielefeld Bioinformatics Service Lesen aus einer Pipe my %who; # accumulate logins open (WHOFH,"who |") or die "Can’t open who: $!"; while ( ) { next unless /(\S+)/; $who{$1}++; } foreach (sort { $who{$b} $who{$a} } keys %who) { printf "%10s %d\n",$_,$who{$_}; } close WHOFH or die "Close error: $!";

10 Center for Biotechnology Bielefeld Bioinformatics Service Schreiben in eine Pipe open(WC,"| wc -lw") or die "cannot open wordcount: $!"; print WC "This is the first line\n"; print WC "This is another line\n"; print WC "This is the last line\n"; print WC "Oops. I lied\n"; close WC;

11 Center for Biotechnology Bielefeld Bioinformatics Service pipe() $result = pipe (READHANDLE, WRITEHANDLE); ● Öffnet ein Paar von Filehandles, die durch eine Pipe verbunden sind pipe WH RHRH process kernel process

12 Center for Biotechnology Bielefeld Bioinformatics Service pipe() ● Wird normallerweise in Verbindung mit fork() benutzt ● Parent läßt eine Filehandle offen und schließt das andere ● Child verfährt umgekehrt pipe WH RHRH process kernel WH RHRH parentchild fork()

13 Center for Biotechnology Bielefeld Bioinformatics Service pipe() ● Wird normallerweise in Verbindung mit fork() benutzt ● Parent läßt eine Filehandle offen und schließt das andere ● Child verfährt umgekehrt pipe WH RHRH process kernel WH RHRH parentchild fork()

14 Center for Biotechnology Bielefeld Bioinformatics Service Aufgabe Schreibe ein Skript, das 1.eine Pipe öffnet 2.ein Child forked 3.eine Nachricht vom Parent an das Child schickt … 4.… und diese im Child ausgibt pipe WH RHRH process kernel WH RHRH parentchild fork()

15 Center for Biotechnology Bielefeld Bioinformatics Service Bidirektionale Pipes ● Pipes, die wir bis jetzt kenngelernt haben sind half-duplex oder unidirectional ● ermöglicht Kommunikation in eine Richtung ● wenn Daten in beide Richtungen fließen sollen, dann müssen zwei Pipes erzeugt werden, eine für jede Richtung

16 Center for Biotechnology Bielefeld Bioinformatics Service Aufgabe Schreibe ein Skript, das ein Child forked und in dem Parent und Child in beide Richtungen kommunizieren können. 1.erzeuge zwei pipes 2.fork 3.Parent schließt Reader von Pipe1 4.Parent schließt Writer von Pipe2 5.Child schließt Writer von Pipe1 6.Child schließt Reader von Pipe2

17 Center for Biotechnology Bielefeld Bioinformatics Service Aufgabe pipe WH RHRH process kernel WH RHRH parent child fork() pipe


Herunterladen ppt "Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Kommunikation von Prozessen Signale und Pipes Alexander Sczyrba"

Ähnliche Präsentationen


Google-Anzeigen