[Overview][Constants][Types][Procedures and functions][Index] Reference for unit 'BaseUnix' (#rtl)

FPSigaction

Install signal handler

Declaration

Source position: bunxh.inc line 95

function FPSigaction(

  sig: cint;

  act: psigactionrec;

  oact: psigactionrec

):cint;

Description

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 sig is 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,OldAct point outside this process address space
sys_eintr
System call was interrupted.

See also

FpSigProcMask

  

Set list of blocked signals

FpSigPending

  

Return set of currently pending signals

FpSigSuspend

  

Set signal mask and suspend process till signal is received

FpKill

  

Send a signal to a process

Example

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.

Documentation generated on: May 14 2021