+.TH SIGNAL 2 2/12/83
+.SH NAME
+signal \- catch or ignore signals
+.SH SYNOPSIS
+.nf
+.ft B
+#include <signal.h>
+.PP
+.ft B
+int (*signal(sig, func))()
+int sig;
+int (*func)();
+.fi
+.ft R
+.SH DESCRIPTION
+\fBThis interface is obsolete and will be replaced in the 4.2 release
+by an interface compatible with signal(3J) and sigsys(2).\fP
+.PP
+.I Signal
+allows the calling process to choose how it will handle
+the receipt of a specific signal.
+.I Sig
+specifies the signal and
+.I func
+specifies the choice.
+.PP
+A signal
+is generated by some abnormal event,
+initiated either by user at a terminal (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 a
+.I signal
+call allows them either to be ignored
+or to cause an interrupt to a specified location.
+Here is the list of signals with names as in
+the include file.
+.LP
+.nf
+.ta \w'SIGVTALRM 'u +\w'15* 'u
+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 a pipe with no one to read it
+SIGALRM 14 alarm clock
+SIGTERM 15 software termination signal
+SIGURG 16 urgent condition pending
+SIGSTOP 17 stop (cannot be caught, held or ignored)
+SIGTSTP 18 stop signal generated from keyboard
+SIGCONT 19 continue after stop
+SIGCHLD 20 child status has changed
+SIGTTIN 21 background read attempted from control terminal
+SIGTTOU 22 background write attempted to control terminal
+SIGIO 23 i/o is possible on a descriptor (see \fIsetdopts\fP(2))
+SIGXCPU 24 cpu time limit exceeded (see \fIsetrlimit\fP(2))
+SIGXFSZ 25 file size limit exceeded (see \fIsetrlimit\fP(2))
+SIGVTALRM 26 virtual time alarm (see \fIsetitimer\fP(2))
+SIGPROF 27 profiling timer alarm (see \fIsetitimer\fP(2))
+.fi
+.PP
+Signal numbers 1, 2, 4, and 9 may be referred to by
+their absolute decimal values. All other signals should be
+referred to symbolically.
+.PP
+The starred signals in the list above cause a core image
+if not caught or ignored.
+.PP
+If
+.I func
+is SIG_DFL, the default action
+for signal
+.I sig
+is reinstated; this default is termination,
+sometimes with a core image.
+If
+.I func
+is SIG_IGN the signal is ignored.
+Otherwise
+when the signal occurs
+.I 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.
+.PP
+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
+.I signal
+call.
+.PP
+If, when using this (older) signal interface,
+a caught signal occurs
+during certain system calls, the call terminates prematurely.
+In particular this can occur
+during an
+.IR ioctl ,
+.IR read ,
+or
+.IR write (2)
+on a slow device (like a terminal; but not a file);
+and during
+.I pause
+or
+.IR wait (2).
+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 EINTR.
+The user's program may then, if it wishes,
+re-execute the call.
+.PP
+The value of
+.I signal
+is the previous (or initial)
+value of
+.I func
+for the particular signal.
+.PP
+After a
+.IR fork (2)
+the child inherits
+all signals.
+.IR Exec (2)
+resets all
+caught signals to default action.
+.SH "RETURN VALUE
+Upon successful completion,
+.I signal
+returns the previous value of
+.I func
+for the specified signal
+.IR sig .
+Otherwise, a value of \-1
+is returned and
+.I errno
+is set to indicate the error.
+.SH ERRORS
+.I Signal
+will fail if one or more of the following are true:
+.TP 15
+[EINVAL]
+\fISig\fP is an illegal signal number,
+including SIGKILL.
+.TP 15
+[EFAULT]
+\fIFunc\fP points to an illegal address.
+.SH CAVEATS
+The
+.I signal
+function is not recommended for use as an interprocess
+communications mechanism.
+.SH "SEE ALSO"
+kill(2),
+pause(2),
+sigsys(2),
+signal(3),
+psignal(3)
+.SH DIAGNOSTICS
+The value (int)\-1 is returned if the
+given signal is out of range.
+.SH BUGS
+The traps should be distinguishable by extra arguments
+to the signal handler, and all hardware supplied parameters should
+be made available to the signal routine.
+.PP
+If a repeated signal arrives before the last one can be
+reset, there is no chance to catch it
+(however this is
+.B not
+true if you use
+.IR sigsys (2J)
+and
+.IR sigset (3)).
+.PP
+The type specification of the routine and its
+.I func
+argument are problematical.