diff options
author | Erich Eckner <git@eckner.net> | 2015-10-05 15:39:27 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2015-10-05 15:39:27 +0200 |
commit | 555319222bac89b46c959580f379aff704c8420a (patch) | |
tree | 28e4e7db00bf1cce92284b1211eab523d7cf29e5 | |
parent | d70a51065c30cd7358001ba325a462c321612cb0 (diff) | |
download | Plasmapropagation-555319222bac89b46c959580f379aff704c8420a.tar.xz |
von sighup auf sigusr1 und sigterm umgestellt
-rw-r--r-- | Physikunit.pas | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/Physikunit.pas b/Physikunit.pas index e761834..2b5fa7b 100644 --- a/Physikunit.pas +++ b/Physikunit.pas @@ -168,7 +168,7 @@ type fortschrittsAnzeige: boolean; ausgabeDateien: array of tAusgabeDatei; public - gotSighup: boolean; + gotSighup,gotSigterm: boolean; constructor create(inName: string; protokollant: tProtokollant; name: string); destructor destroy; override; function iteriereSchritt(start: double; var zeitPhysik,zeitDatei: double): boolean; // noch nicht zu Ende? @@ -1160,6 +1160,11 @@ var i,j: longint; pro: tProtokollant; {$ENDIF} begin + if simulation.gotSigterm then begin + abbrechen; + simulation.gotSigterm:=false; + end; + if abbruch then begin t:=t+dT; exit; @@ -1254,6 +1259,7 @@ begin breite:=10.0; fortschrittsAnzeige:=false; gotSighup:=false; + gotSigterm:=false; dP:=-1; pMax:=3; @@ -1536,7 +1542,8 @@ begin {$ifdef Linux} // Linux specific na^.sa_Restorer := Nil; {$endif} - if (fPSigaction(SIGHUP, na, nil) <> 0) then begin + if (fPSigaction(SIGUSR1, na, nil) <> 0) or + (fPSigaction(SIGTERM, na, nil) <> 0) then begin pro.schreibe('Fehler: '+inttostr(fpgeterrno)+'.'); raise exception.create('Fehler in tSimulation.create!'); end; @@ -1615,9 +1622,18 @@ procedure SignalCapture(signal : longint); cdecl; var i: longint; begin - if signal=SIGHUP then - for i:=0 to length(simulationen)-1 do - simulationen[i].gotSighup:=true; + case signal of + SIGUSR1: begin + writeln('received SIGUSR1!'); + for i:=0 to length(simulationen)-1 do + simulationen[i].gotSighup:=true; + end; + SIGTERM: begin + writeln('received SIGTERM!'); + for i:=0 to length(simulationen)-1 do + simulationen[i].gotSigterm:=true; + end; + end{of case}; end; initialization |