Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ signal(2) — Ultrix-11 3.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

kill(1)

kill(2)

ptrace(2)

sigsys(2j)

setjmp(3)

sigset(3j)

signal(2)

NAME

signal − catch or ignore signals

SYNTAX

#include <signal.h>

int (*signal(sig, func))()
int sig;
void (*func)();

DESCRIPTION

A signal is generated by some abnormal event that is initiated either by user at a typewriter (for example, a quit or interrupt), by a program error (for example, a bus error), or by request of another program (for example, a kill command).  Normally, all signals cause termination of the receiving process, but a signal call allows them either to be ignored or to cause an interrupt to a specified location.  A list of usable signals are:

SIGHUP    1     hangup
SIGINT    2     interrupt
SIGQUIT   3*    quit
SIGILL    4*    illegal instruction (not reset when caught)
SIGTRAP   5*    trace trap (not reset when caught)
SIGIOT    6*    IOT instruction
SIGEMT    7*    EMT instruction
SIGFPE    8*    floating point exception
SIGKILL   9     kill (cannot be caught or ignored)
SIGBUS    10*   bus error
SIGSEGV   11*   segmentation violation
SIGSYS    12*   bad argument to system call
SIGPIPE   13    write on  pipe or link with no one to read
SIGALRM   14    alarm clock
SIGTERM   15    software termination signal
SIGUSR1   30    user-defined signal 1
SIGUSR2   31    user-defined signal 2

The starred signals in the list above cause a core image if not caught or ignored.

If func is SIG_DFL, the default action for signal sig is reinstated.  This default is termination (sometimes with a core image).  If func is SIG_IGN the signal is ignored.  Otherwise, when the signal occurs, func will be called with the signal number as argument.  A return from the function will continue the process at the point it was interrupted.  Except as indicated, a signal is reset to SIG_DFL after being caught.  Thus, if it is desired to catch every such signal, the catching routine must issue another signal call. 

When a caught signal occurs during certain system calls, the call terminates prematurely.  In particular, this can occur either during a read or write call on a slow device (like a typewriter but not a file), or during a pause or wait call.  When such a signal occurs, the saved user status is arranged in such a way that when return from the signal-catching takes place, it will appear that the system call returned an error status.  The user’s program may then re-execute the call. 

The value of signal is the previous (or initial) value of func for the particular signal. 

After a fork call, the child inherits all signals.  An exec call resets all caught signals to default action. 

RESTRICTIONS

If a repeated signal arrives before the last one can be reset, there is no chance to catch it. 

The type specification of the routine and its func argument are problematical. 

DIAGNOSTICS

The signal call will fail if:

[EINVAL] The specified sig is an illegal signal number, including SIGKILL. 

ASSEMBLER

(signal = 48.) 
sys signal; sig; label
(old label in r0)

If label is 0, default action is reinstated.  If label is odd, the signal is ignored.  Any other even label specifies an address in the process where an interrupt is simulated.  An RTI or RTT instruction will return from the interrupt. 

SEE ALSO

kill(1), kill(2), ptrace(2), sigsys(2j), setjmp(3), sigset(3j)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026