summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-10-05 15:39:27 +0200
committerErich Eckner <git@eckner.net>2015-10-05 15:39:27 +0200
commit555319222bac89b46c959580f379aff704c8420a (patch)
tree28e4e7db00bf1cce92284b1211eab523d7cf29e5
parentd70a51065c30cd7358001ba325a462c321612cb0 (diff)
downloadPlasmapropagation-555319222bac89b46c959580f379aff704c8420a.tar.xz
von sighup auf sigusr1 und sigterm umgestellt
-rw-r--r--Physikunit.pas26
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