Thread IPC zwischen zwei Skripten (3 answers)
Opened by jherz at 2005-05-29 14:27

jherz
 2005-05-29 14:27
#55153 #55153
User since
2005-05-29
2 Artikel
BenutzerIn
[default_avatar]
Hallo Experten,

gestern hatte ich mich mal an etwas schwierigeres gemacht - und scheiterte prompt. Ich hoffe, daß jemand von euch mir helfen kann - und daß die Textmenge hier nicht abschreckend wirkt.

Ich habe zwei Perl-Skripte, die beide durchlaufen sollen, d.h. keines von beiden kann ständig beendet und wieder gestartet werden.

Skript 1 wartet als Dämon auf bestimmte Ereignisse und soll die dann Skript 2 melden, das einen Alert per Instant Messaging versenden soll.

Beides für sich läuft schön. Mein Problem ist nun, der Austausch der Meldung. Ich hatte mich entschieden, Skript 2 am Anfang von Skript 1 aus per
Code: (dl )
open INFORMANT, "| ./informat.pl";

zu starten. Jenes soll dann meiner Vorstellung nach loopen und wenn es was auf STDIN gibt, den alert senden.
Grob gesagt sieht der Code so aus:

Code: (dl )
1
2
3
4
5
6
7
while(1) {
while (<STDIN>) {
sendalert($_);
}

listen_to_IM_server();
}


Tja, nur dummerweise blockt Perl an "while (<STDIN>)" solange Skript 1 das Filehandle offen hat. Und von daher stehe ich nun dumm da.

Meine Fragen nun ist zweiteilig:
1. Gibt es irgendeine Möglichkeit, <STDIN> nichtblockend zu bekommen? D.h. einfach weitergehen wenn keine Bytes (bzw. keine Zeile, d.h. mit \n) anliegt.
2. Gibt es insgesamt eine bessere Lösung für mein Problem als per anonymer Pipe?

Die Datenübergabe per File und Signalisierung über SIGHUP habe ich auch schon probiert. Nur ist mir das sowieso zuwieder (wegen ein paar Byte ständig File auf und zu samt Probleme des gleichzeitigen Zugriffs) und zweitens kriege ich den HUP nicht an Skript 2 abgesetzt.

Grüße,
Jürgen\n\n

<!--EDIT|jherz|1117364948-->

View full thread IPC zwischen zwei Skripten