V6/usr/man/man2/signal.2
.th SIGNAL II 8/5/73
.sh NAME
signal \*- catch or ignore signals
.sh SYNOPSIS
(signal = 48.)
.br
.ft B
sys signal; sig; label
.ft R
.br
(old value in r0)
.s3
.ft B
signal(sig, func)
.br
int (*func)( );
.ft R
.sh DESCRIPTION
A
.it signal
is generated by some abnormal event,
initiated either by user at a typewriter (quit, interrupt),
by a program error (bus error, etc.),
or by request of another program (kill).
Normally all signals
cause termination of the receiving process,
but this call allows them either to be ignored
or to cause an interrupt to a specified location.
Here is the list of signals:
.s3
.lp +10 5
1 hangup
.lp +10 5
2 interrupt
.lp +10 5
3* quit
.lp +10 5
4* illegal instruction (not reset when caught)
.lp +10 5
5* trace trap (not reset when caught)
.lp +10 5
6* IOT instruction
.lp +10 5
7* EMT instruction
.lp +10 5
8* floating point exception
.lp +10 5
9 kill (cannot be caught or ignored)
.lp +10 5
10* bus error
.lp +10 5
11* segmentation violation
.lp +10 5
12* bad argument to system call
.lp +10 5
13 write on a pipe with no one to read it
.s3
.i0
In the assembler call, if
.it label
is 0,
the process is terminated
when the signal occurs; this is the default action.
If
.it label
is odd, the signal is ignored.
Any other even
.it label
specifies an address in the process
where an interrupt is simulated.
An RTI or RTT instruction will return from the
interrupt.
Except as indicated,
a signal is reset to 0 after being caught.
Thus if it is desired to
catch every such signal,
the catching routine must
issue another
.it signal
call.
.s3
In C,
if
.it func
is 0, the default action
for signal
.it sig
(termination)
is reinstated.
If
.it func
is 1,
the signal is ignored.
If
.it func
is non-zero and
even, it is assumed to be the address
of a function entry point.
When the signal occurs,
the function will be called.
A return from the function will
continue the process at the point it was interrupted.
As in the assembler call,
.it signal
must in general be called again to catch subsequent signals.
.s3
When a caught signal occurs
during certain system calls, the call terminates prematurely.
In particular this can occur
during a
.it read
or
.it write
on a slow device (like a typewriter; but not a file);
and during
.sleep
or
.it wait.
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 a characteristic error status.
The user's program may then, if it wishes,
re-execute the call.
.s3
The starred signals in the list above cause a core image
if not caught or ignored.
.s3
The value of the call is the old action defined for the signal.
.s3
After a
.it fork
(II)
the child inherits
all signals.
.it Exec
(II)
resets all
caught signals to default action.
.sh "SEE ALSO"
kill (I), kill (II),
ptrace (II),
reset (III)
.sh DIAGNOSTICS
The error bit
(c-bit)
is set if the
given signal is out of range.
In C, a \*-1 indicates an error;
0 indicates success.
.sh BUGS