table of contents
| SIGNAL(9) | Kernel Developer's Manual | SIGNAL(9) | 
NAME¶
signal, SIGADDSET,
  SIGDELSET, SETEMPTYSET,
  SIGFILLSET, SIGISMEMBER,
  SIGISEMPTY, SIGNOTEMPTY,
  SIGSETEQ, SIGSETNEQ,
  SIGSETOR, SIGSETAND,
  SIGSETNAND, SIGSETCANTMASK,
  SIG_STOPSIGMASK,
  SIG_CONTSIGMASK, SIGPENDING,
  cursig, execsigs,
  issignal, killproc,
  pgsigio, postsig,
  sigexit, siginit,
  signotify, trapsignal —
SYNOPSIS¶
#include <sys/param.h>
#include <sys/proc.h>
#include <sys/signalvar.h>
void
  
  SIGADDSET(sigset_t
    set, int
  signo);
void
  
  SIGDELSET(sigset_t
    set, int
  signo);
void
  
  SIGEMPTYSET(sigset_t
    set);
void
  
  SIGFILLSET(sigset_t
    set);
int
  
  SIGISMEMBER(sigset_t
    set, int
  signo);
int
  
  SIGISEMPTY(sigset_t
    set);
int
  
  SIGNOTEMPTY(sigset_t
    set);
int
  
  SIGSETEQ(sigset_t
    set1, sigset_t
    set2);
int
  
  SIGSETNEQ(sigset_t
    set1, sigset_t
    set2);
void
  
  SIGSETOR(sigset_t
    set1, sigset_t
    set2);
void
  
  SIGSETAND(sigset_t
    set1, sigset_t
    set2);
void
  
  SIGSETNAND(sigset_t
    set1, sigset_t
    set2);
void
  
  SIG_CANTMASK(sigset_t
    set);
void
  
  SIG_STOPSIGMASK(sigset_t
    set);
void
  
  SIG_CONTSIGMASK(sigset_t
    set);
int
  
  SIGPENDING(struct
    proc *p);
int
  
  cursig(struct
    thread *td);
void
  
  execsigs(struct
    proc *p);
int
  
  issignal(struct
    thread *td);
void
  
  killproc(struct
    proc *p, char
    *why);
void
  
  pgsigio(struct
    sigio **sigiop, int
    sig, int
    checkctty);
void
  
  postsig(int
    sig);
void
  
  sigexit(struct
    thread *td, int
    signum);
void
  
  siginit(struct
    proc *p);
void
  
  signotify(struct
    thread *td);
void
  
  trapsignal(struct
    thread *td, int
    sig, u_long
  code);
DESCRIPTION¶
TheSIGADDSET() macro adds signo
  to set. No effort is made to ensure that
  signo is a valid signal number.
The SIGDELSET() macro removes
    signo from set. No effort is
    made to ensure that signo is a valid signal
  number.
The SIGEMPTYSET() macro clears all signals
    in set.
The SIGFILLSET() macro sets all signals in
    set.
The SIGISMEMBER() macro determines if
    signo is set in set.
The SIGISEMPTY() macro determines if
    set does not have any signals set.
The SIGNOTEMPTY() macro determines if
    set has any signals set.
The SIGSETEQ() macro determines if two
    signal sets are equal; that is, the same signals are set in both.
The SIGSETNEQ() macro determines if two
    signal sets differ; that is, if any signal set in one is not set in the
    other.
The SIGSETOR() macro ORs the signals set
    in set2 into set1.
The SIGSETAND() macro ANDs the signals set
    in set2 into set1.
The SIGSETNAND() macro NANDs the signals
    set in set2 into set1.
The SIG_CANTMASK() macro clears the
    SIGKILL and SIGSTOP signals
    from set. These two signals cannot be blocked or
    caught and SIG_CANTMASK() is used in code where
    signals are manipulated to ensure this policy is enforced.
The SIG_STOPSIGMASK() macro clears the
    SIGSTOP, SIGTSTP,
    SIGTTIN, and SIGTTOU signals
    from set. SIG_STOPSIGMASK() is
    used to clear stop signals when a process is waiting for a child to exit or
    exec, and when a process is continuing after having been suspended.
The SIG_CONTSIGMASK() macro clears the
    SIGCONT signal from set.
    SIG_CONTSIGMASK() is called when a process is
    stopped.
The SIGPENDING() macro determines if the
    given process has any pending signals that are not masked. If the process
    has a pending signal and the process is currently being traced,
    SIGPENDING() will return true even if the signal is
    masked.
The cursig() function returns the signal
    number that should be delivered to process
    td->td_proc. If there are no signals pending, zero
    is returned.
The execsigs() function resets the signal
    set and signal stack of a process in preparation for an
    execve(2). The process lock for p
    must be held before execsigs() is called.
The issignal() function determines if
    there are any pending signals for process
    td->td_proc that should be caught, or cause this
    process to terminate or interrupt its current system call. If process
    td->td_proc is currently being traced, ignored
    signals will be handled and the process is always stopped. Stop signals are
    handled and cleared right away by issignal() unless
    the process is a member of an orphaned process group and the stop signal
    originated from a TTY. The process spin lock for
    td->td_proc may be acquired and released. The
    sigacts structure
    td->td_proc->p_sigacts must be locked before
    calling issignal() and may be released and
    reacquired during the call. The process lock for
    td->td_proc must be acquired before calling
    issignal() and may be released and reacquired during
    the call. Default signal actions are not taken for system processes and
    init.
The killproc() function delivers
    SIGKILL to p.
    why is logged as the reason why the
    process was killed.
The pgsigio() function sends the signal
    sig to the process or process group
    sigiop->sio_pgid. If
    checkctty is non-zero, the signal is only delivered to
    processes in the process group that have a controlling terminal. If
    sigiop->sio_pgid is for a process (> 0), the
    lock for sigiop->sio_proc is acquired and released.
    If sigiop->sio_pgid is for a process group (<
    0), the process group lock for sigiop->sio_pgrp is
    acquired and released. The lock sigio_lock is acquired
    and released.
The postsig() function handles the actual
    delivery of the signal sig.
    postsig() is called from
    ast() after the kernel has been notified that a
    signal should be delivered (via a call to
    signotify(), which causes the flag
    PS_NEEDSIGCHK to be set). The process lock for
    process that owns curthread must be held before
    postsig() is called, and the current process cannot
    be 0. The lock for the p_sigacts field of the current
    process must be held before postsig() is called, and
    may be released and reacquired.
The sigexit() function causes the process
    that owns td to exit with a return value of signal
    number sig. If required, the process will dump core.
    The process lock for the process that owns td must be
    held before sigexit() is called.
The siginit() function is called during
    system initialization to cause every signal with a default property of
    SA_IGNORE (except SIGCONT)
    to be ignored by p. The process lock for
    p is acquired and released, as is the lock for sigacts
    structure p->p_sigacts. The only process that
    siginit() is ever called for is
    proc0.
The signotify() function flags that there
    are unmasked signals pending that ast() should
    handle. The process lock for process td->td_proc
    must be held before signotify() is called, and the
    thread lock is acquired and released.
The trapsignal() function sends a signal
    that is the result of a trap to process
    td->td_proc. If the process is not being traced and
    the signal can be delivered immediately,
    trapsignal() will deliver it directly; otherwise,
    trapsignal() will call psignal(9)
    to cause the signal to be delivered. The process lock for
    td->td_proc is acquired and released. The lock for
    the p_sigacts field of
    td->td_proc is acquired and released.
RETURN VALUES¶
TheSIGISMEMBER(), SIGISEMPTY(),
  SIGNOTEMPTY(), SIGSETEQ(),
  SIGSETNEQ(), and SIGPENDING()
  macros all return non-zero (true) if the condition they are checking is found
  to be true; otherwise, zero (false) is returned.
The cursig() function returns either a
    valid signal number or zero.
issignal() returns either a valid signal
    number or zero.
SEE ALSO¶
gsignal(9), pgsignal(9), psignal(9)AUTHORS¶
This manual page was written by Chad David <davidc@FreeBSD.org>.| June 8, 2013 | Linux 4.9.0-9-amd64 |