Thread Wie breche ich ein Script ab, das andere Programme aufruft? (8 answers)
Opened by Sven_123 at 2010-06-15 13:45

Sven_123
 2010-06-15 13:45
#138364 #138364
User since
2010-06-01
120 Artikel
BenutzerIn
[default_avatar]
Komme mal wieder nicht so recht weiter...:
Ich habe ein Script mit dem ich mehrfach gnuplot aufrufe um mir Graphen zu plotten. Ausschnittsweise so:
Code: (dl )
1
2
3
for $i ($ARGV[0] .. $ARGV[1]){
system "gnuplot plot.temp\nrm plot.temp";
}

In meinem plotfile hab ich Gnuplot angewiesen eine kleine Pause einzulegen, damit ich mir das Bild angucken kann. Ab und zu möchte ich das Skript nach den ersten Bildern abbrechen, weil es bei mehreren Bildern schon eine Weile braucht bis die durch sind und es etwas nervt, wenn alle drei Sekunden Fenster am Bildschirm aufploppen, wenn man etwas anderes machen möchte.

Drücke ich Strg+c wird aber nur gnuplot abgeschossen, d.h. schneller als ich klicken kann ist das nächste Fenster offen. Im Buch und hier im Forum bin ich auf fork gestoßen, mit dem ich ja einen neuen Prozess starten kann, da kam ich auf die Idee meine for-Schleife zu forken:
Code: (dl )
1
2
3
4
5
6
7
$pid =fork;
unless ($pid){
for $i ($ARGV[0] .. $ARGV[1]){
system "gnuplot plot.temp\nrm plot.temp";
}
}
waitpid($pid,0);
Hier weiß ich mal wieder nicht zu 100% was ich mache, (v.a. was das ($pid,0) bedeutet und warum ich ein unless benutze), aber weder in meinem Buch noch in auf Perldoc ist fork wirklich ausführlich beschrieben (oder zu speziell, bin mir nicht sicher, ob ich das aus der perlipc lesen könnte) und so geht es zumindest...

Ein Strg+c beendet hier, wie ich festgestellt habe allerdings nur den äußeren Prozess, der innere läuft weiter.
Mein nächster Versuch war, in den äußeren Prozess ein
Code: (dl )
1
2
$SIG{INT}=\&sig_int;
sub sig_int {$int++}
einzubauen und mit einer if-Schleife die überprüft ob was in der Variable steht die for-Schleife im inneren Prozess abzubrechen. Leider werden Variablen anscheinend nicht übergeben (zumindest nicht nachträglich - hat jedenfalls nicht funktioniert...*g).

Jetzt beim Schreiben kommt mir grad, ich könnte natürlich statt der Variablen eine Datei anlegen und in der Schleife überprüfen, ob diese existiert...ich probier das aufjedenfall mal aus, aber vielleicht könnte mir trotzdem jemand sagen, wie ich das "richtig" mach...vielen Dank im vorraus. :)

Edit: Das mit der Datei funktioniert - ich markier den mal als gelöst, da ich ja ne Lösung hab. Wenn mir jemand eine schönere Methode zeigen möchte, würd ich mich trotzdem freuen.
Last edited: 2010-06-15 13:50:31 +0200 (CEST)

View full thread Wie breche ich ein Script ab, das andere Programme aufruft?