Thread Terminal schliessen mit Perl (20 answers)
Opened by meier19 at 2009-03-21 15:44

betterworld
 2009-03-22 13:28
#119676 #119676
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Du kannst dafür sorgen, dass beim Schließen des Terminals Dein Programm noch etwas machen kann. Dein Programm stirbt nicht einfach so, sondern es kriegt ein Signal, normalerweise ein SIGHUP. So kannst Du es abfangen:
Code (perl): (dl )
1
2
3
4
5
6
7
$SIG{HUP} = sub {
    exit; # exit beendet das Programm, führt aber zuerst die END-Blöcke aus
};

END {
    unlink($lockfile) if defined $lockfile;
}


Und es ist gut, dass Du mehr darueber gesagt hast, was Du tun moechtest. Es geht hier nicht um Neugier. Wenn Du naemlich bei dem Piep-Beispiel geblieben wärst, wäre es vermutlich problematischer gewesen, im Todessturz noch ein "\a" auszugeben, weil das ja vom Terminal interpretiert wird, aber das Terminal schon weg ist. Siehe auch X-Y-Problem.

Und wie murphy schon sagt, am besten wäre es, irgend ein richtiges Locking zu nehmen.

Zu dem Code oben noch eine Bemerkung: Der END-Block wird *immer* ausgeführt, wenn das Programm beendet wird. Sogar, wenn es beendet wird, bevor die Variable $lockfile gesetzt wurde, egal ob dies im Code über oder unter END steht. Daher prüfe ich mit defined. Alternativ könnte man das unlink natürlich auch direkt in den Sighandler reinschreiben.
Last edited: 2009-03-22 13:31:57 +0100 (CET)

View full thread Terminal schliessen mit Perl