Install signal handler.
Source position: bunxh.inc line 100
function FPSigaction( |
sig: cint; |
act: psigactionrec; |
oact: psigactionrec |
):cint; |
FPSigaction changes the action to take upon receipt of a signal. Act and Oact are pointers to a SigActionRec record. Sig specifies the signal, and can be any signal except SIGKILL or SIGSTOP.
If Act is non-nil, then the new action for signal Sig is taken from it. If OAct is non-nil, the old action is stored there. Sa_Handler may be SIG_DFL for the default action or SIG_IGN to ignore the signal. Sa_Mask Specifies which signals should be ignored during the execution of the signal handler. Sa_Flags Specifies a series of flags which modify the behaviour of the signal handler. You can 'or' none or more of the following :
Extended error information can be retrieved using fpGetErrno.
|
Set list of blocked signals. |
|
|
Return set of currently pending signals. |
|
|
Set signal mask and suspend process till signal is received. |
|
|
Send a signal to a process. |
Program example57; { Program to demonstrate the SigAction function.} { do a kill -USR1 pid from another terminal to see what happens. replace pid with the real pid of this program. You can get this pid by running 'ps'. } uses BaseUnix; Var oa,na : PSigActionRec; Procedure DoSig(sig : cint);cdecl; begin writeln('Receiving signal: ',sig); end; begin new(na); new(oa); na^.sa_Handler:=SigActionHandler(@DoSig); fillchar(na^.Sa_Mask,sizeof(na^.sa_mask),#0); na^.Sa_Flags:=0; {$ifdef Linux} // Linux specific na^.Sa_Restorer:=Nil; {$endif} if fpSigAction(SigUsr1,na,oa)<>0 then begin writeln('Error: ',fpgeterrno,'.'); halt(1); end; Writeln ('Send USR1 signal or press <ENTER> to exit'); readln; end.