Seite 1 von 1
Signal von kill abfangen (SIGTERM)
Verfasst: 14.11.2009 00:44
von Velz
Hat jemand eine Idee wie man ein Signal von Kill kontrolliert abfängt um Dateien zu schließen und Speicher zu bereinigen????
Im Besonderen SIGTERM und SIGKILL??
Re: kill abfangen
Verfasst: 14.11.2009 01:35
von Velz
ok... wer lesen kann ist im Vorteil... und da war doch mal etwas in C...
Mit einem Beispiel aus dem englischen Forum habe ich es zum laufen gebracht. Ich stelle die Lösung mal ein, evtl. kanns jemand brauchen.
Es gieng um die Frage, wie ich ein Programm beim Runterfahren oder auch über den Befehl "kill" ordentlich beenden kann. D.h. ich möchte Zeit haben die Dateien zu schließen und den Speicher zu bereinigen.
Hier das Beispiel (weitgehend aus dem englischen Forum):
Code: Alles auswählen
; demo for the use of *nix signals from within PB
; can be used in GUI applications too
; 2007 walker
;-------------------------------------------------
#SIGHUP = 1
#SIGINT = 2
#SIGQUIT = 3
#SIGILL = 4
#SIGTRAP = 5
#SIGABRT = 6
#SIGBUS = 7
#SIGFPE = 8
#SIGKILL = 9
#SIGUSR1 = 10
#SIGSEGV = 11
#SIGUSR2 = 12
#SIGPIPE = 13
#SIGALRM = 14
#SIGTERM = 15
#SIGSTKFLT = 16
#SIGCHLD = 17
#SIGCONT = 18
#SIGSTOP = 19
#SIGTSTP = 20
#SIGTTIN = 21
#SIGTTOU = 22
#SIGURG = 23
#SIGXCPU = 24
#SIGXFSZ = 25
#SIGVTALRM= 26
#SIGPROF = 27
#SIGWINCH = 28
#SIGIO = 29
#SIGPWR = 30
#SIGSYS = 31
ProcedureC on_killed_do(signum)
PrintN("Speicher aufräumen")
PrintN("Datei schließen")
PrintN(Str(signum))
End
EndProcedure
signal_(#SIGINT,@on_killed_do())
signal_(#SIGQUIT,@on_killed_do())
signal_(#SIGTERM,@on_killed_do())
Repeat
Delay(2000)
PrintN("Warte auf Signal" )
ForEver
Jetzt kann ich mit "ps -C PROGRAMMNAME" den Prozess und damit die PID suchen und mit "kill PID" den Prozess beenden. Kill sendet primär das Signal 15 SIGTERM. Das Signal wird abgefangen und die Prozedur ausgeführt. SIGKILL kann nicht abgefangen werden.
Das gute ist, es funktioniert auch wenn das Programm in einem Delay() steht und man sonst keine Möglichkeit hat an das Programm ran zu kommen.
Re: Signal von kill abfangen (SIGTERM)
Verfasst: 12.05.2011 15:46
von funk.munich
Hi zusammen,
gibt es hierfür unter Windows ein vergleichbaren Code? Wenn ich diesen Code unter Windows versuche
auszuführen erscheint die Fehlermeldung "signal_() is not a function, array, macro or linked list."
Danke + Gruß,
Daniel
Re: Signal von kill abfangen (SIGTERM)
Verfasst: 29.01.2017 14:23
von melow
Hallo Alle
Bräuchte auch obigen Code für Windows.
Kann mir evntl. jemand dabei weiterhelfen?
Danke.
lg
Melow

Re: Signal von kill abfangen (SIGTERM)
Verfasst: 29.01.2017 15:24
von Bisonte
Ich weiss zwar nicht genau, was mit dem Kill gemeint ist, aber ich kann mir vorstellen, dass damit das
herunterfahren gemeint ist.
Das Signal was Windows beim runterfahren sendet ist in einem WindowCallback mit
#WM_QUERYENDSESSION
abfragbar. zu finden unter
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
Ansonsten gab es hier im Forum (ich glaube von TS-Soft) ein Beispiel dafür...
__________________________________________________
URL-Tags hinzugefügt
30.01.2017
RSBasic
Re: Signal von kill abfangen (SIGTERM)
Verfasst: 29.01.2017 16:07
von melow
Danke für Deine Antwort.
Das Besipiel mit #WM_QUERYENDSESSION hatte ich gesehen... allerdings hat mein exe Prozess weder ein Fenster und noch nicht einmal eine Console (ist ein reiner standalone Daemon)... hab gesehen daß #WM_QUERYENDSESSION nur mit mindestens einem Fenster funktioniert.
Müsste quasi das "Prozess Beenden" Signal oder Event abfangen - und noch kurz aufräumarbeiten erledigen - bevor der Prozess endgültig vom OS beendet wird...
Was tun?
lg Melow
Re: Signal von kill abfangen (SIGTERM)
Verfasst: 29.01.2017 16:17
von Bisonte
Ein unsichtbares Fenster.... !
Re: Signal von kill abfangen (SIGTERM)
Verfasst: 29.01.2017 16:54
von DarkDragon
Bisonte hat geschrieben:Ich weiss zwar nicht genau, was mit dem Kill gemeint ist, aber ich kann mir vorstellen, dass damit das
herunterfahren gemeint ist.
Das ist das einfache Abwürgen eines Prozesses (Strg + C in der Konsole z.B.) und hat nichts mit herunterfahren zu tun. Man will quasi vor dem Abwürgen noch etwas bereinigen oder ähnliches. Hier eine genauere Beschreibung:
http://www.gnu.org/software/libc/manual ... gnals.html
[EDIT]
Das hier dürfte nützlich sein:
https://msdn.microsoft.com/en-us/librar ... h09_topic3
[EDIT]
Soweit ich weiß gibt es allerdings keine derartigen Signale unter Windows und man muss u.U. viele verschiedene Techniken anwenden, je nach dem was man erreichen will. Das hier z.B. fängt Strg+C ab, aber kein Schließen durch den TaskManager o.ä.:
https://msdn.microsoft.com/en-us/librar ... 2147217396