Sendet Linux beim Shutsdown oder beim Beenden (nicht Kill) im Taskmanager eine Message an Kommandozeilen-Programme, und wie kann ich diese auswerten?
Ich habe eine Abfrage auf Ctrl-C, und dann wird ein Logeintrag geschrieben und das Programm wird ordentlich beendet. Starte ich das Programm allerdings per cron, komme ich ja nicht per Ctrl-C an das Programm, kann es aber im Taskmanager oder beim Shutdown / Reboot beeden. Dabei wird es aber abrupt unterbrochen und kein Logeintrag geschrieben.
Shutdown - Messages unter Linux?
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Shutdown - Messages unter Linux?
Man könnte das Signal auswerten. z.B. SIGHUP oder SIGTERM.
https://www.freepascal.org/docs-html/rt ... ction.html
https://www.freepascal.org/docs-html/rt ... ction.html
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Shutdown - Messages unter Linux?
Genau so würde ich es auch machen. Es gibt verschiedene Signale in POSIX, die für dich relevant sind. SIGINT - Interrupt, wird ausgelöst wenn STRG+C in der Konsole gedrückt wird. SIGHUP - Hang Up wird gesendet wenn das Terminal welches dem Programm zugeordnet wird geschlossen wird. SIGTERM - Terminate ist eine Anfrage das Programm nett zu beenden und SIGKILL - Kill um das Programm ohne widerrede zu killen. Ein SIGKILL kann man daher auch nicht handeln oder ignorieren. Wenn das kommt wird der Prozess ohne reaktionsmöglichkeit gekillt.theo hat geschrieben:Man könnte das Signal auswerten. z.B. SIGHUP oder SIGTERM.
https://www.freepascal.org/docs-html/rt ... ction.html
Der Taskmanager sollte normalerweise ein SIGTERM senden, und nur wenn dein Programm nicht reagiert dann mit einem SIGKILL den shutdown enforcen (sigkill entspricht also windows Sofort beenden button wenn ein Programm nicht reagiert), also solltest du SIGHUP, SIGINT und SIGTERM handeln
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Shutdown - Messages unter Linux?
Und dazu muss ich, wenn ich es richtig verstanden habe, zwingend eine Hookup-Procedure (heisst das unter Linux auch so?) mit den SigActionHandler verbinden? Eine "einfache" Abfrage in der Hauptschleife geht nicht?
Ist ja irgendwie auch logisch, wenn das Progamm irgendwo wartet, muss es trotzdem auf die Sigs reagieren...
Was bekomme ich, wenn Linux rebootet, ein Sigterm oder ein Sighup?
Und wie lange habe ich dann üblicherweise, um das zu verarbeiten? Reicht die Zeit, um noch einen Eintrag ins Logfile zu schreiben, ohne dass es mir die Datei zerschießt? Oder eine Message per Telegram rauszuschicken, dass der Bot beendet wird, was durchaus 300msec dauern kann?
Denn sonst kann ich mir das gleich sparen...
Ist ja irgendwie auch logisch, wenn das Progamm irgendwo wartet, muss es trotzdem auf die Sigs reagieren...
Was bekomme ich, wenn Linux rebootet, ein Sigterm oder ein Sighup?
Und wie lange habe ich dann üblicherweise, um das zu verarbeiten? Reicht die Zeit, um noch einen Eintrag ins Logfile zu schreiben, ohne dass es mir die Datei zerschießt? Oder eine Message per Telegram rauszuschicken, dass der Bot beendet wird, was durchaus 300msec dauern kann?
Denn sonst kann ich mir das gleich sparen...
Re: Shutdown - Messages unter Linux?
Die Zeit sollte reichen (10 - 90 sec. von SIGTERM bis SIGKILL), das ist aber afaik nicht standardisiert.
Ich würde mal SIGTERM nehmen. Das müsste mind. theoretisch das richtige Signal sein.
Vielleicht kannst du auf SIGHUP zusätzlich horchen.
Ich würde mal SIGTERM nehmen. Das müsste mind. theoretisch das richtige Signal sein.
Vielleicht kannst du auf SIGHUP zusätzlich horchen.
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Shutdown - Messages unter Linux?
Um auf Ctrl-C zu reagieren, brauche ich Sigint, was ja aber wahrscheinlich jede Nachricht weiterschickt. Kann ich dann einfach mit Keypressed und Readkey auf Ctrl-C prüfen, so wie ich es jetzt schon mache? Ist ja eh nur für den Fall, dass das Programm zum Testen in der Konsole läuft und nicht per cron gestartet wurde.
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Shutdown - Messages unter Linux?
Das SigTerm kann auch von anderen Programmen gesendet werden, dann würde den Programm auch einfach beendenTimm Thaler hat geschrieben:Um auf Ctrl-C zu reagieren, brauche ich Sigint, was ja aber wahrscheinlich jede Nachricht weiterschickt. Kann ich dann einfach mit Keypressed und Readkey auf Ctrl-C prüfen, so wie ich es jetzt schon mache? Ist ja eh nur für den Fall, dass das Programm zum Testen in der Konsole läuft und nicht per cron gestartet wurde.