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
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:
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-->