Hi, I'm trying to make a daemon, to run on Linux. I got a testversion working, but I have a question about signals. I can respond to signals but every signal I didn't define stops the daemon, in an "unmanageable" way. Is this the proper behaviour ?
The source : program my_service; {$ifdef FPC}{$mode objfpc}{$h+}{$endif} uses {$ifdef FPC}{$ifdef linux}cthreads,{$endif}{$endif} baseunix,crt,sysutils; var pid : Tpid; finished : boolean; oa_sigterm, na_sigterm : PSigActionRec ; oa_sigusr1, na_sigusr1 : PSigActionRec ; oa_sigusr2, na_sigusr2 : PSigActionRec ; Procedure DoSig(sig : cint); cdecl ; begin writeln ('Receiving signal : ', sig) ; finished:=(sig=SigTerm); end ; procedure daemon; begin {Do the actual work here.} repeat until finished; writeln('finished in daemon'); end; begin finished:=false; new(na_sigterm) ; new(oa_sigterm) ; na_sigterm^.sa_Handler:=SigActionHandler(@DoSig) ; fillchar(na_sigterm^.Sa_Mask, sizeof(na_sigterm^.sa_mask), #0); na_sigterm^.Sa_Flags:=0 ; {$ifdef Linux} // Linux specific na_sigterm^.Sa_Restorer:= Nil; {$endif} if fpSigAction(Sigterm,na_sigterm,oa_sigterm)<>0 then begin writeln ('Error : ',fpgeterrno , '(SigTerm).') ; halt (1); end; new(na_sigusr1) ; new(oa_sigusr1) ; na_sigusr1^.sa_Handler:=SigActionHandler(@DoSig) ; fillchar(na_sigusr1^.Sa_Mask, sizeof(na_sigusr1^.sa_mask), #0); na_sigusr1^.Sa_Flags:=0 ; {$ifdef Linux} // Linux specific na_sigusr1^.Sa_Restorer:= Nil; {$endif} if fpSigAction(SigUsr1,na_sigusr1,oa_sigusr1)<>0 then begin writeln ('Error : ',fpgeterrno , '(SigUsr1).') ; halt (1); end; new(na_sigusr2) ; new(oa_sigusr2) ; na_sigusr2^.sa_Handler:=SigActionHandler(@DoSig) ; fillchar(na_sigusr2^.Sa_Mask, sizeof(na_sigusr2^.sa_mask), #0); na_sigusr2^.Sa_Flags:=0 ; {$ifdef Linux} // Linux specific na_sigusr2^.Sa_Restorer:= Nil; {$endif} if fpSigAction(sigusr2,na_sigusr2,oa_sigusr2)<>0 then begin writeln ('Error : ',fpgeterrno , '(SigUsr2).') ; halt (1); end; pid:=fpfork; if pid=0 then daemon; writeln('finished main'); end. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal