Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
SIGNAL(2)		      System Calls Manual		     SIGNAL(2)

       signal -	catch or ignore	signals

       #include	<signal.h>

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

       N.B.:  The  system  currently supports two signal implementations.  The
       one described here is standard in version 7 UNIX	systems,  and  is  re-
       tained for backward compatabililty.  The	one described in sigsys(2J) as
       supplemented by sigset(3J) provides for the needs of  the  job  control
       mechanisms  used	 by csh(1), and	corrects the bugs in this older	imple-
       mentation of signals, allowing programs which process interrupts	to  be
       written reliably.

       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 signal call allows them ei-
       ther  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.

       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
	       16   unassigned
       N.B.: There are actually	more  signals;	see  sigsys(2J);  the  signals
       listed here are those of	standard version 7.

       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.

       If, when	using this (older) signal interface, a	caught	signal	occurs
       during  certain system calls, the call terminates prematurely.  In par-
       ticular this can	occur during an	ioctl, read, or	write(2) on a slow de-
       vice  (like  a  terminal; but not a file); and during pause or 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 ap-
       pear that the system call returned an error status.  The	user's program
       may then, if it wishes, re-execute the call.

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

       After a fork(2) the child inherits all  signals.	  Exec(2)  resets  all
       caught signals to default action.

       If  a process is	using the mechanisms of	sigsys(2J) and sigset(3J) then
       many of these calls are automatically restarted (See sigsys(2J) and in-
       tro(3J) for details).

       Signal will fail	if:

       [EINVAL]		   Sig is an illegal signal number, including SIGKILL.

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

       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.

       If a repeated signal arrives before the last one	can be reset, there is
       no chance to catch it (however this is not true if you  use  sigsys(2J)
       and sigset(3J)).

       The  type  specification	of the routine and its func argument are prob-

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

       If label	is 0, default action is	reinstated.  If	label is 1, 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  sigsys(2J)	for information	on how hardware	faults are mapped into

3rd Berkeley Distribution					     SIGNAL(2)


Want to link to this manual page? Use this URL:

home | help