(see also
.BR signal (7)
for more details).
-
+.PP
The behavior of the call is dependent on the value of
.IR how ,
as follows.
.I oldset
is non-NULL, the previous value of the signal mask is stored in
.IR oldset .
-
+.PP
If
.I set
is NULL, then the signal mask is unchanged (i.e.,
but the current value of the signal mask is nevertheless returned in
.I oldset
(if it is not NULL).
-
+.PP
A set of functions for modifying and inspecting variables of type
.I sigset_t
("signal sets") is described in
.BR sigsetops (3).
-
+.PP
The use of
.BR sigprocmask ()
is unspecified in a multithreaded process; see
It is not possible to block
.BR SIGKILL " or " SIGSTOP .
Attempts to do so are silently ignored.
-
+.PP
Each of the threads in a process has its own signal mask.
-
+.PP
A child created via
.BR fork (2)
inherits a copy of its parent's signal mask;
the signal mask is preserved across
.BR execve (2).
-
+.PP
If
.BR SIGBUS ,
.BR SIGFPE ,
See
.BR sigsetops (3)
for details on manipulating signal sets.
-
+.PP
Note that it is permissible (although not very useful) to specify both
.I set
and
as NULL.
.\"
.SS C library/kernel differences
-
+.PP
The kernel's definition of
.IR sigset_t
differs in size from that used
(it is nevertheless named
.I sigset_t
in the kernel sources).
-
+.PP
The glibc wrapper function for
.BR sigprocmask ()
silently ignores attempts to block the two real-time signals that
See
.BR nptl (7)
for details.
-
+.PP
The original Linux system call was named
.BR sigprocmask ().
However, with the addition of real-time signals in Linux 2.2,
.IR sizeof(kernel_sigset_t) ).
.\" sizeof(kernel_sigset_t) == _NSIG / 8,
.\" which equals to 8 on most architectures, but e.g. on MIPS it's 16.
-
+.PP
The glibc
.BR sigprocmask ()
wrapper function hides these details from us, transparently calling