for-Schleife vorzeitig beenden

oyster-manu

oyster-manu

toast
Hallo,

ich habe mir ein Skript geschrieben das mir den Audiostream einer Video-DVD in wav-Dateien kapitelweise speichert. Das extrahieren des Audiostreams erfolgt über eine for-Schleife die das Programm "transcode" aufruft.
Wenn ich mein Skript nun vorzeitig beende (mit Strg-C oder kill pid), läuft transcode aber weiterhin. Sogar wenn ich transcode über kill transcode-pid beende, wird es durch die for-Schleife wieder aufgerufen, um das nächste Kapitel der DVD zu extrahieren.
Die For-Schleife muss also irgendwie weiterhin aktiv sein. Wie beende also diese for-Schleife ordnungsgemäß?

Viele Grüße
Manu
 
Mit Ctrl-C in der aufrufenden Konsole unterbrichst Du nur den aktuellen Prozess, d.h., den aktuellen Schleifendurchlauf. Du muesstest die PID des uebergeordneten Skripts beenden, also z.B. in einer anderen Konsole nach "ps aux | grep mein_skript_name" suchen und die entsprechende PID mit kill beenden.
 
Das funktioniert fast :) Wenn ich das Skript kille, ist das Skript auch beendet, transcode läuft aber weiter. Vermutlich weil es als unabhängiger Prozess läuft (ohne dass ich das explizit angegeben hätte)? Neben transcode laufen auch noch tcdecode, tccat und tcdemux, ohne dass ich sie überhaupt im Skript erwähne.
 
Nur als Tipp gedacht, da selbst noch keinen Bedarf gehabt:

Das Signal (CTRL-C = SIGTERM) gezielt mit eigener Routine behandeln, siehe z.B. "trap".

Sicherlich ist es möglich, innerhalb eines Scripts ein Signal abzufangen und - in Deinem Fall - "transcode" und seine Subprozesse nach CTRL-C entsprechend zu killen sowie anschliessend mit "exit" das Script zu beenden.
 
Zurück
Oben