mirror of https://github.com/mkerrisk/man-pages
249 lines
5.9 KiB
Groff
249 lines
5.9 KiB
Groff
'\" t
|
|
.\" Copyright (c) 2005 by Michael Kerrisk <mtk-manpages@gmx.net>
|
|
.\"
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
.\" the use of the information contained herein.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\"
|
|
.TH SIGVEC 2 2005-12-01 "Linux 2.6.14" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
sigvec, sigblock, sigsetmask, siggetmask, sigmask \- BSD signal API
|
|
.SH SYNOPSIS
|
|
.B #define _BSD_SOURCE
|
|
.br
|
|
.B #include <signal.h>
|
|
.sp
|
|
.BI "int sigvec(int " sig ", struct sigvec *" vec ", struct sigvec *" ovec );
|
|
.sp
|
|
.BI "int sigmask(int " signum );
|
|
.sp
|
|
.BI "int sigblock(int " mask );
|
|
.sp
|
|
.BI "int sigsetmask(int " mask );
|
|
.sp
|
|
.B int siggetmask(void);
|
|
.SH DESCRIPTION
|
|
These functions are provided in glibc as a compatibility interface
|
|
for programs that make use of the historical BSD signal API.
|
|
This API is obsolete: new applications should use the POSIX signal API
|
|
.RB ( sigaction (2),
|
|
.BR sigprocmask (2),
|
|
etc.)
|
|
|
|
The
|
|
.BR sigvec ()
|
|
function sets and/or gets the disposition of the signal
|
|
.I sig
|
|
(like the POSIX
|
|
.BR sigaction (2)).
|
|
If
|
|
.I vec
|
|
is not NULL, it points to a
|
|
.I sigvec
|
|
structure that defines the new disposition for
|
|
.IR sig .
|
|
If
|
|
.I ovec
|
|
is not NULL, it points to a
|
|
.I sigvec
|
|
structure that is used to return the previous disposition of
|
|
.IR sig .
|
|
To obtain the current disposition of
|
|
.I sig
|
|
without changing it, specify NULL for
|
|
.IR vec ,
|
|
and a non-NULL pointer for
|
|
.IR ovec .
|
|
|
|
The dispositions for
|
|
.B SIGKILL
|
|
and
|
|
.B SIGSTOP
|
|
cannot be changed.
|
|
|
|
The
|
|
.I sigvec
|
|
structure has the following form:
|
|
.nf
|
|
|
|
struct sigvec {
|
|
void (*sv_handler)(); /* Signal disposition */
|
|
int sv_mask; /* Signals to be blocked in handler */
|
|
int sv_flags; /* Flags */
|
|
};
|
|
|
|
.fi
|
|
The
|
|
.I sv_handler
|
|
field specifies the disposition of the signal, and is either:
|
|
the address of a signal handler function; or
|
|
.B SIG_DFL
|
|
meaning the default disposition applies for the signal; or
|
|
.B SIG_IGN
|
|
meaning that the signal is ignored.
|
|
|
|
If
|
|
.I sv_handler
|
|
specifies the address of a signal handler, then
|
|
.I sv_mask
|
|
specifies a mask of signals that are to be blocked while
|
|
the handler is executing.
|
|
In addition, the signal for which the handler is invoked is
|
|
also blocked by default.
|
|
Attempts to block
|
|
.B SIGKILL
|
|
or
|
|
.B SIGSTOP
|
|
are silently ignored.
|
|
|
|
If
|
|
.I sv_handler
|
|
specifies the address of a signal handler, then the
|
|
.I sv_flags
|
|
field specifies flags controlling what happens when the handler is called.
|
|
This field may contain zero or more of the following flags:
|
|
.TP
|
|
.B SV_INTERRUPT
|
|
If the signal handler interrupts a blocking system call,
|
|
then upon return from the handler the system call will not be restarted:
|
|
instead it will fail with the error
|
|
.IR EINTR .
|
|
If this flag is not specified, then system calls are restarted
|
|
by default.
|
|
.TP
|
|
.B SV_RESETHAND
|
|
Reset the disposition of the signal to the default
|
|
before calling the signal handler.
|
|
If this flag is not specified, then the handler remains established
|
|
until explicitly removed by a later call to
|
|
.BR sigvec ()
|
|
or until the process performs an
|
|
.BR execve (2).
|
|
.TP
|
|
.B SV_ONSTACK
|
|
Handle the signal on the alternate signal stack
|
|
(historically established under BSD using the obsolete
|
|
.BR sigstack ()
|
|
function; the POSIX replacement is
|
|
.BR sigaltstack ()).
|
|
.PP
|
|
The
|
|
.BR sigmask ()
|
|
function constructs and returns a "signal mask" for
|
|
.IR signum .
|
|
For example, we can initialise the
|
|
.I vec.sv_mask
|
|
field given to
|
|
.BR sigvec ()
|
|
using code such as the following:
|
|
.nf
|
|
|
|
vec.sv_mask = sigmask(SIGQUIT) | sigpause (SIGABRT);
|
|
/* Block SIGQUIT and SIGABRT during
|
|
handler execution */
|
|
.fi
|
|
.PP
|
|
The
|
|
.BR sigblock ()
|
|
function adds the signals in
|
|
.I mask
|
|
to the process's signal mask
|
|
(like POSIX
|
|
.IR sigprocmask(SIG_BLOCK) ),
|
|
and returns the process's previous signal mask.
|
|
Attempts to block
|
|
.B SIGKILL
|
|
or
|
|
.B SIGSTOP
|
|
are silently ignored.
|
|
.PP
|
|
The
|
|
.BR sigsetmask ()
|
|
function sets the process's signal mask to the value given in
|
|
.I mask
|
|
(like POSIX
|
|
.IR sigprocmask(SIG_SETMASK) ),
|
|
and returns the process's previous signal mask.
|
|
.PP
|
|
The
|
|
.BR siggetmask ()
|
|
function returns the process's current signal mask.
|
|
This call is equivalent to
|
|
.IR sigblock(0) .
|
|
.SH RETURN VALUE
|
|
The
|
|
.BR sigvec ()
|
|
function returns 0 on success; on error, it returns \-1 and sets
|
|
.I errno
|
|
to indicate the error.
|
|
|
|
The
|
|
.BR sigblock ()
|
|
and
|
|
.BR sigsetmask ()
|
|
functions return the previous signal mask.
|
|
|
|
The
|
|
.BR sigmask ()
|
|
function returns the signal mask for
|
|
.IR signum .
|
|
.SH ERRORS
|
|
See the ERRORS under
|
|
.BR sigaction (2)
|
|
and
|
|
.BR sigprocmask (2).
|
|
.SH NOTES
|
|
On 4.3BSD, the
|
|
.BR signal ()
|
|
function provided reliable semantics (as when calling
|
|
.BR sigvec ()
|
|
with
|
|
.I vec.sv_mask
|
|
equal to 0).
|
|
On System V,
|
|
.BR signal ()
|
|
provides unreliable semantics.
|
|
POSIX.1-2001 leaves these aspects of
|
|
.BR signal ()
|
|
unspecified.
|
|
See
|
|
.BR signal (2)
|
|
for further details.
|
|
|
|
In order to wait for a signal,
|
|
BSD and System V both provided a function named
|
|
.BR sigpause (),
|
|
but this function has a different argument on the two systems.
|
|
See
|
|
.BR sigpause (3)
|
|
for details.
|
|
.SH "CONFORMING TO"
|
|
All of these functions were in
|
|
4.3BSD, except
|
|
.BR siggetmask (),
|
|
whose origin is unclear.
|
|
These functions are obsolete: do not use them in new programs.
|
|
.SH "SEE ALSO"
|
|
.BR kill (2),
|
|
.BR pause (2),
|
|
.BR sigaction (2),
|
|
.BR signal (2),
|
|
.BR sigprocmask (2),
|
|
.BR raise (3),
|
|
.BR sigpause (3),
|
|
.BR sigset (3),
|
|
.BR signal (7)
|