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??
Signal von kill abfangen (SIGTERM)
Signal von kill abfangen (SIGTERM)
Zuletzt geändert von Velz am 14.11.2009 13:30, insgesamt 1-mal geändert.
Win10/64|Ubuntu-Server|Mint WS // Programmiere Datenbankanwendungen und Tools mit PB-5.x und MySQL-5.x unter Win und Linux
Re: kill abfangen
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):
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.
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
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.
Win10/64|Ubuntu-Server|Mint WS // Programmiere Datenbankanwendungen und Tools mit PB-5.x und MySQL-5.x unter Win und Linux
-
- Beiträge: 123
- Registriert: 27.03.2006 09:45
Re: Signal von kill abfangen (SIGTERM)
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
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)
Hallo Alle
Bräuchte auch obigen Code für Windows.
Kann mir evntl. jemand dabei weiterhelfen?
Danke.
lg
Melow
Bräuchte auch obigen Code für Windows.
Kann mir evntl. jemand dabei weiterhelfen?
Danke.
lg
Melow
Re: Signal von kill abfangen (SIGTERM)
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
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
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
Re: Signal von kill abfangen (SIGTERM)
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
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)
Ein unsichtbares Fenster.... !
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
-
- Beiträge: 6267
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Signal von kill abfangen (SIGTERM)
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: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.
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
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.