windows : SetConsoleCtrlHandler
linux : signal
Es gibt zwei Verhalten des Signals, die unerwünscht sind, die Komplexität im Code verursacht.
- Programmabbruch
- Gebrochene IO
Das erste Verhalten kann durch die Verwendung SetConsoleCtrlHandler/Signals in einem C-Programm gefangen und in Erinnerung bleiben. Dadurch kann Ihre Funktion aufgerufen werden und Sie können sich daran erinnern, dass das System heruntergefahren werden muss. Dann siehst du irgendwann im lua-Code, dass es passiert ist (Call to check), und führe deinen Auf- und Abbau durch.
Das zweite Verhalten ist, dass eine blockierende Operation (Lesen/Schreiben) durch das Signal abgebrochen wird und die Operation nicht abgeschlossen ist. Dies müsste bei jedem E/A-Ereignis überprüft und dann erneut gestartet oder gegebenenfalls abgebrochen werden.
Ctrl-C ist abfangbar mit 'pcall' –
Leider ist Ctrl-C auf LuaJIT nicht mit pcall abfragbar. –
Wie genau fangen Sie es mit pcall? pcall (io.read()) fängt nicht doppeltes ctrl-c ein, nur ctrl-c + enter. –