next up previous contents index
Next: SigPending Up: Functions and procedures Previous: Shell

SigAction

   

Declaration:

Procedure SigAction (Signum : Integer; Var Act,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, SigPending, SigSuspend, Kill, Sigaction (2)

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 Linux;

Var
   oa,na : PSigActionRec;
   
Procedure DoSig(sig : Longint);cdecl;

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

begin
   new(na);
   new(oa);
   na^.Sa_Handler:=@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.



Michael Van Canneyt
Thu Sep 10 13:59:33 CEST 1998