unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Page:
Section:
Apropos / Subsearch:
optional field

SIGNAL(3V)                                                          SIGNAL(3V)



NAME
       signal - simplified software signal facilities

SYNOPSIS
       #include <&lt;signal.h>&gt;

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

DESCRIPTION
       signal() is a simplified interface to the more general sigvec(2) facil-
       ity.  Programs that use signal() in preference  to  sigvec()  are  more
       likely to be portable to all systems.

       A  signal is generated by some abnormal event, initiated by a user at a
       terminal (quit, interrupt, stop), by a program error (bus error, etc.),
       by  request  of  another  program  (kill), or when a process is stopped
       because it wishes to access its control terminal  while  in  the  back-
       ground  (see  termio(4)).   Signals  are  optionally  generated  when a
       process resumes after being stopped, when the status of child processes
       changes,  or when input is ready at the control terminal.  Most signals
       cause termination of the receiving process if no action is taken;  some
       signals  instead cause the process receiving them to be stopped, or are
       simply discarded if the process has not  requested  otherwise.   Except
       for  the  SIGKILL and SIGSTOP signals, the signal() call allows signals
       either to be ignored or to interrupt to a specified location.  The fol-
       lowing is a list of all signals with names as in the include file <&lt;sig-
       nal.h>&gt;:

              SIGHUP    1    hangup
              SIGINT    2    interrupt
              SIGQUIT   3*   quit
              SIGILL    4*   illegal instruction
              SIGTRAP   5*   trace trap
              SIGABRT   6*   abort (generated by abort(3) routine)
              SIGEMT    7*   emulator trap
              SIGFPE    8*   arithmetic exception
              SIGKILL   9    kill (cannot be caught, blocked, or ignored)
              SIGBUS    10*  bus error
              SIGSEGV   11*  segmentation violation
              SIGSYS    12*  bad argument to system call
              SIGPIPE   13   write on a pipe or other socket with no one to read it
              SIGALRM   14   alarm clock
              SIGTERM   15   software termination signal
              SIGURG    16@  urgent condition present on socket
              SIGSTOP   17+  stop (cannot be caught, blocked, or ignored)
              SIGTSTP   18+  stop signal generated from keyboard
              SIGCONT   19@  continue after stop
              SIGCHLD   20@  child status has changed
              SIGTTIN   21+  background read attempted from control terminal
              SIGTTOU   22+  background write attempted to control terminal
              SIGIO     23@  I/O is possible on a descriptor (see fcntl(2V))
              SIGXCPU   24   cpu time limit exceeded (see getrlimit(2))
              SIGXFSZ   25   file size limit exceeded (see getrlimit(2))
              SIGVTALRM 26   virtual time alarm (see getitimer(2))
              SIGPROF   27   profiling timer alarm (see getitimer(2))
              SIGWINCH  28@  window changed (see termio(4) and win(4S))
              SIGLOST   29*  resource lost (see lockd(8C))
              SIGUSR1   30   user-defined signal 1
              SIGUSR2   31   user-defined signal 2

       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 (with a core  image  for  starred  signals)
       except  for signals marked with @ or +.  Signals marked with @ are dis-
       carded if the action is  SIG_DFL;  signals  marked  with  +  cause  the
       process to stop.  If func is SIG_IGN the signal is subsequently ignored
       and pending instances of the signal are discarded.  Otherwise, when the
       signal  occurs  further  occurrences  of  the  signal are automatically
       blocked and func is called.

       A return from the function unblocks the handled  signal  and  continues
       the  process  at  the point it was interrupted.  Unlike previous signal
       facilities, the handler func remains installed after a signal has  been
       delivered.

       If  a caught signal occurs during certain system calls, terminating the
       call prematurely, the call is automatically restarted.   In  particular
       this can occur during a read(2V) or write(2V) on a slow device (such as
       a terminal; but not a file) and during a wait(2V).

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

       After  a  fork(2V)  or  vfork(2)  the  child  inherits all signals.  An
       execve(2V) resets all caught signals to  the  default  action;  ignored
       signals remain ignored.

SYSTEM V DESCRIPTION
       If  func  is  SIG_IGN  the  signal  is subsequently ignored and pending
       instances of the signal are  discarded.   Otherwise,  when  the  signal
       occurs,  func  is  called.   Further  occurrences of the signal are not
       automatically blocked.  The value of func  for  the  caught  signal  is
       reset  to SIG_DFL before func is called, unless the signal is SIGILL or
       SIGTRAP.

       A return from the function continues the process at the point at  which
       it was interrupted.  The handler func does not remain installed after a
       signal has been delivered.

       If a caught signal occurs during certain system calls, causing the call
       to  terminate prematurely, the call is interrupted.  In particular this
       can occur during a read(2V) or write(2V) on a slow device  (such  as  a
       terminal;  but  not  a  file)  and during a wait(2V).  After the signal
       catching function returns, the interrupted system call may return a  -1
       to the calling process with errno set to EINTR.

RETURN VALUES
       signal()  returns  the  previous  action  on  success.   On failure, it
       returns -1 and sets errno to indicate the error.

ERRORS
       signal() will fail and no action will take place if one of the  follow-
       ing occurs:

       EINVAL         sig was not a valid signal number.

                      An  attempt  was  made to ignore or supply a handler for
                      SIGKILL or SIGSTOP.

SEE ALSO
       kill(1), execve(2V), fork(2V),  getitimer(2),  getrlimit(2),  kill(2V),
       ptrace(2),    read(2V),   sigblock(2),   sigpause(2V),   sigsetmask(2),
       sigstack(2),  sigvec(2),  vfork(2),  wait(2V),  write(2V),  setjmp(3V),
       termio(4)

NOTES
       The handler routine can be declared:

              void handler(sig, code, scp, addr)
              int sig, 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  <&lt;signal.h>&gt;),  used to restore the context from
       before the signal; and addr is  additional  address  information.   See
       sigvec(2) for more details.



                                21 January 1990                     SIGNAL(3V)