FPSigaction function
Install signal handler.
Declaration
function FPSigaction(sig: cint; act: psigactionrec; oact: psigactionrec)
: cintDescription
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 :
- SA_NOCLDSTOP
- If
sigis SIGCHLD do not receive notification when child processes stop. - SA_ONESHOT or SA_RESETHAND
- Restore the signal action to the default state once the signal handler has been called.
- SA_RESTART
- For compatibility with BSD signals.
- SA_NOMASK or SA_NODEFER
- Do not prevent the signal from being received from within its own signal handler.
Errors
Extended error information can be retrieved using fpGetErrno.
- sys_einval
- an invalid signal was specified, or it was SIGKILL or SIGSTOP.
- sys_efault
-
Act,OldActpoint outside this process address space - sys_eintr
- System call was interrupted.
See also
Example: ex57
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.An experiment, built from development snapshots. Not the official Free Pascal or Lazarus documentation.
