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

FreeBSD Manual Pages


home | help
sigvec(3UCB)	   SunOS/BSD Compatibility Library Functions	  sigvec(3UCB)

       sigvec -	software signal	facilities

       /usr/ucb/cc[ flag ... ] file...
       #include	<signal.h>

       int sigvec(ssig,	*nvec, *ovec);
       int sig;
       struct sigvec *nvec
       struct sigvec *ovec

       struct sigvec *nvec, *ovec;

       The system defines a set	of signals that	may be delivered to a process.
       Signal delivery resembles the occurrence	of a hardware  interrupt:  the
       signal  is blocked from further occurrence, the current process context
       is saved, and a new one is built.  A process may	specify	a  handler  to
       which  a	signal is delivered, or	specify	that a signal is to be blocked
       or ignored. A process may also specify that a default action is	to  be
       taken by	the system when	a signal occurs. Normally, signal handlers ex-
       ecute on	the current stack of the process.
	This may be changed, on	a per-handler basis, so	that signals are taken
       on a special signal stack.

       All  signals  have  the same priority. Signal routines execute with the
       signal that caused their	invocation to be blocked,  but	other  signals
       may  yet	 occur.	 A  global signal mask defines the set of signals cur-
       rently blocked from delivery to a  process.   The  signal  mask	for  a
       process is initialized from that	of its parent (normally	0).  It	may be
       changed with a sigblock() or sigsetmask() call, or when a signal	is de-
       livered to the process.

       A  process may also specify a set of flags for a	signal that affect the
       delivery	of that	signal.

       When a signal condition arises for a process, the signal	is added to  a
       set of signals pending for the process.	If the signal is not currently
       blocked by the process then it is delivered to  the  process.   When  a
       signal  is  delivered, the current state	of the process is saved, a new
       signal mask is calculated (as described below), and the signal  handler
       is  invoked.  The call to the handler is	arranged so that if the	signal
       handling	routine	returns	normally the process will resume execution  in
       the  context  from before the signal's delivery.	 If the	process	wishes
       to resume in a different	context, then it must arrange to  restore  the
       previous	context	itself.

       When  a signal is delivered to a	process	a new signal mask is installed
       for the duration	of the process'	signal handler (or until a  sigblock()
       or  sigsetmask()	call is	made).	This mask is formed by taking the cur-
       rent signal mask, adding	the signal to be delivered, and	ORing  in  the
       signal mask associated with the handler to be invoked.

       The  action  to be taken	when the signal	is delivered is	specified by a
       sigvec()	structure, which includes the following	members:

       void	 (*sv_handler)();	 /* signal handler */
       int	 sv_mask;	 /* signal mask	to apply */
       int	 sv_flags;	 /* see	signal options */
       #define	 SV_ONSTACK	 /* take signal	on signal stack	*/
       #define	 SV_INTERRUPT	 /* do not restart system on signal return */
       #define	 SV_RESETHAND	 /* reset handler to SIG_DFL when signal taken*/

       If the SV_ONSTACK bit is	set in the flags for that signal,  the	system
       will  deliver  the  signal to the process on the	signal stack specified
       with sigstack(3UCB) rather than delivering the signal  on  the  current

       If  nvec	 is not	a NULL pointer,	sigvec() assigns the handler specified
       by sv_handler(),	the mask specified by sv_mask(), and the flags	speci-
       fied by sv_flags() to the specified signal.  If nvec is a NULL pointer,
       sigvec()	does not change	the handler, mask, or flags for	the  specified

       The mask	specified in nvec is not allowed to block SIGKILL, SIGSTOP, or
       SIGCONT.	The system enforces this restriction silently.

       If ovec is not a	NULL pointer, the handler, mask, and flags  in	effect
       for the signal before the call to sigvec() are returned to the user.  A
       call to sigvec()	with nvec a NULL pointer and ovec not a	 NULL  pointer
       can  be	used to	determine the handling information currently in	effect
       for a signal without changing that information.

       The following is	a list of all signals with names  as  in  the  include
       file <signal.h>:




		    illegal instruction

		    trace trap

		    abort (generated by	abort(3C) routine)

		    emulator trap

		    arithmetic exception

		    kill (cannot be caught, blocked, or	ignored)

		    bus	error

		    segmentation violation

		    bad	argument to function

		    write on a pipe or other socket with no one	to read	it

		    alarm clock

		    software termination signal

		    urgent condition present on	socket

		    stop (cannot be caught, blocked, or	ignored)

		    stop signal	generated from keyboard

		    continue after stop	(cannot	be blocked)

		    child status has changed

		    background read attempted from control terminal

		    background write attempted to control terminal

		    I/O	is possible on a descriptor (see fcntl(2))

		    cpu	time limit exceeded (see getrlimit(2))

		    file size limit exceeded (see getrlimit(2))

		    virtual time alarm;	see setitimer()	on getitimer(2)

		    profiling timer alarm; see setitimer() on getitimer(2)

		    window changed (see	termio(7I))

		    resource lost (see lockd(1M))

		    user-defined signal	1

		    user-defined signal	2

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

       Once a signal handler is	installed, it remains installed	until  another
       sigvec()	 call is made, or an execve(2) is performed, unless the	SV_RE-
       SETHAND bit is set in the flags for that	signal.	  In  that  case,  the
       value  of  the handler for the caught signal will be set	to SIG_DFL be-
       fore entering the signal-catching function, unless the signal  is  SIG-
       ILL,  SIGPWR,  or  SIGTRAP.  Also, if this bit is set, the bit for that
       signal in the signal mask will not be set; unless the signal mask asso-
       ciated with that	signal blocks that signal, further occurrences of that
       signal will not be blocked. The SV_RESETHAND flag is not	 available  in
       4.2BSD,	hence  it  should  not	be  used  if backward compatibility is

       The default action for a	signal may be reinstated by setting  the  sig-
       nal's  handler  to SIG_DFL; this	default	is termination except for sig-
       nals marked with	* or **.  Signals marked with *	are discarded  if  the
       action is SIG_DFL; signals marked with ** cause the process to stop. If
       the process is terminated, a "core image" will be made in  the  current
       working	directory  of  the  receiving process if the signal is one for
       which an	asterisk appears in the	above list (see	core(4)).

       If the handler for that signal is SIG_IGN, the signal  is  subsequently
       ignored,	and pending instances of the signal are	discarded.

       If  a  caught  signal occurs during certain functions, the call is nor-
       mally restarted.	The call can be	forced to terminate  prematurely  with
       an  EINTR error return by setting the SV_INTERRUPT bit in the flags for
       that signal. The	SV_INTERRUPT flag is not available in 4.2BSD, hence it
       should  not  be	used if	backward compatibility is needed. The affected
       functions are read(2) or	write(2) on a slow device (such	as a  terminal
       or pipe or other	socket,	but not	a file)	and during a wait(2).

       After  a	fork(2)	or vfork(2) the	child inherits all signals, the	signal
       mask, the signal	stack, and the restart/interrupt and reset-signal-han-
       dler flags.

       The  execve(2) call resets all caught signals to	default	action and re-
       sets all	signals	to be caught on	the user stack.	Ignored	signals	remain
       ignored;	the signal mask	remains	the same; signals that interrupt func-
       tions continue to do so.

       The accuracy of addr is machine dependent.  For	example,  certain  ma-
       chines  may  supply  an address that is on the same page	as the address
       that caused the fault. If an appropriate	addr  cannot  be  computed  it
       will be set to SIG_NOADDR.

       A  0  value  indicates that the call succeeded. A -1 return value indi-
       cates that an error occurred and	errno is set to	indicate the reason.

       sigvec()	will fail and no new signal handler will be installed  if  one
       of the following	occurs:

		    Either  nvec  or  ovec is not a NULL pointer and points to
		    memory that	is not a valid part  of	 the  process  address

		    sig	is not a valid signal number, or, SIGKILL, or SIGSTOP.

       intro(2),   exec(2),  fcntl(2),	fork(2),  getitimer(2),	 getrlimit(2),
       ioctl(2), kill(2), ptrace(2),  read(2),	umask(2),  vfork(2),  wait(2),
       write(2),  setjmp(3C)  sigblock(3UCB),	 sigstack(3UCB), signal(3UCB),
       wait(3UCB), signal(3C), core(4),	streamio(7I), termio(7I)

       Use of these interfaces should be restricted to only applications writ-
       ten  on	BSD platforms.	Use of these interfaces	with any of the	system
       libraries or in multi-thread applications is unsupported.

       SIGPOLL is a synonym for	SIGIO. A SIGIO will be issued when a file  de-
       scriptor	 corresponding	to  a  STREAMS	(see intro(2)) file has	a "se-
       lectable" event pending.	Unless that descriptor has been	put into asyn-
       chronous	 mode  (see fcntl(2)), a process may specifically request that
       this  signal  be	 sent  using   the   I_SETSIG	ioctl(2)   call	  (see
       streamio(7I)). Otherwise, the process will never	receive	SIGPOLLs0.

       The handler routine can be declared:

       void handler(int	sig, int code, struct sigcontext *scp, char *addr);

       Here  sig  is the signal	number;	code is	a parameter of certain signals
       that provides additional	detail;	scp is a  pointer  to  the  sigcontext
       structure  (defined  in signal.h), used to restore the context from be-
       fore the	signal;	and addr is additional address information.

       The signals SIGKILL, SIGSTOP, and SIGCONT cannot	be ignored.

SunOS 5.9			  10 Jan 1996			  sigvec(3UCB)


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

home | help