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

# SigAction

Install signal handler

## Declaration

Source position: oldlinux.pp line 1480

`procedure SigAction(`
`Signum: LongInt;`
`Act: PSigActionRec;`
`OldAct: PSigActionRec`
`);`

## Description

Changes the action to take upon receipt of a signal. Act and Oldact are pointers to a SigActionRec record. SigNum specifies the signal, and can be any signal except SIGKILL or SIGSTOP.

If Act is non-nil, then the new action for signal SigNum is taken from it. If OldAct 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 ignord during the execution of the signal handler. Sa_Flags Speciefies a series of flags which modify the behaviour of the signal handler. You can 'or' none or more of the following :

SA_NOCLDSTOP
  If signum 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

LinuxError is used to report errors.

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

SigProcMask |  | Set list of blocked signals
SigPending |  | Return set of currently pending signals
SigSuspend |  | Set signal mask and suspend process till signal is received
Kill |  | 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 oldlinux;

    Var
       oa,na : PSigActionRec;

    Procedure DoSig(sig : Longint);cdecl;

    begin
       writeln('Receiving signal: ',sig);
    end;

    begin
       new(na);
       new(oa);
       na^.Handler.sh:=@DoSig;
       na^.Sa_Mask:=0;
       na^.Sa_Flags:=0;
       na^.Sa_Restorer:=Nil;
       SigAction(SigUsr1,na,oa);
       if LinuxError<>0 then
         begin
         writeln('Error: ',linuxerror,'.');
         halt(1);
         end;
       Writeln ('Send USR1 signal or press <ENTER> to exit');
       readln;
    end.

Documentation generated on: Feb 26 2014