Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ signal(3) — A/UX 0.7

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

kill(1)

kill(2)

pause(2)

ptrace(2)

set42sig(2)

setcompat(2)

wait(2)

setjmp(3C)



     signal(3)                                               signal(3)



     NAME
          signal - specify what to do upon receipt of a signal

     SYNOPSIS
          #include <signal.h>

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

     DESCRIPTION
          signal allows the calling process to choose one of three
          ways in which it is possible to handle the receipt of a
          specific signal.  sig specifies the signal and func
          specifies the choice.

          sig can be assigned any one of the following except SIGKILL:
     SIGHUP    01          hangup
     SIGINT    02          interrupt
     SIGQUIT   03*         quit
     SIGILL    04*         illegal instruction (not reset when caught)
     SIGTRAP   05*         trace trap (not reset when caught)
     SIGIOT    06*         IOT instruction
     SIGEMT    07*         EMT instruction
     SIGFPE    08*         floating point exception
     SIGKILL   09          kill (cannot be caught or ignored)
     SIGBUS    10*         bus error
     SIGSEGV   11*         segmentation violation
     SIGSYS    12*         bad argument to system call
     SIGPIPE   13          write on a pipe with no one to read it
     SIGALRM   14          alarm clock
     SIGTERM   15          software termination signal
     SIGUSR1   16          user defined signal 1
     SIGUSR2   17          user defined signal 2
     SIGCLD    18          death of a child (see WARNING below)
     SIGPWR    19          power fail (see WARNING below)

     See below for the significance of the asterisk ( * ) in the above list.

          func is assigned one of three values: SIGDFL, SIGIGN, or a
          function address.  The actions prescribed by these values
          are as follows:

          SIGDFL -  terminate process upon receipt of a signal
             Upon receipt of the signal sig, the receiving process is
             to be terminated with the following consequences:

                All of the receiving process's open file descriptors
                will be closed.

                If the parent process of the receiving process is
                executing a wait, it will be notified of the



     Page 1                                        (last mod. 1/15/87)





     signal(3)                                               signal(3)



                termination of the receiving process and the
                terminating signal's number will be made available to
                the parent process; see wait(2).

                If the parent process of the receiving process is not
                executing a wait, the receiving process will be
                transformed into a zombie process (see exit(2) for
                definition of zombie process).

                The parent process ID of each of the receiving
                process's existing child processes and zombie
                processes will be set to 1.  This means the
                initialization process (see intro(2)) inherits each of
                these processes.

                Each attached shared memory segment is detached and
                the value of shmnattach in the data structure
                associated with its shared memory identifier is
                decremented by 1.

                For each semaphore for which the receiving process has
                set a semadj value (see semop(2)), that semadj value
                is added to the semval of the specified semaphore.

                If the process has a process, text, or data lock, an
                unlock is performed (see plock(2)).

                An accounting record will be written on the accounting
                file if the system's accounting routine is enabled;
                see acct(2).

                If the receiving process's process ID, tty group ID,
                and process group ID are equal, the signal SIGHUP will
                be sent to all of the processes that have a process
                group ID equal to the process group ID of the
                receiving process.

                A ``core image'' will be made in the current working
                directory of the receiving process if sig is one for
                which an asterisk appears in the above list and the
                following conditions are met:

                   The effective user ID and the real user ID of the
                   receiving process are equal.

                   An ordinary file named core exists and is writable
                   or can be created.  If the file must be created, it
                   will have the following properties:

                      a mode of 0666 modified by the file creation
                      mask (see umask(2))




     Page 2                                        (last mod. 1/15/87)





     signal(3)                                               signal(3)



                      a file owner ID that is the same as the
                      effective user ID of the receiving process

                      a file group ID that is the same as the
                      effective group ID of the receiving process

          SIGIGN -  ignore signal
             The signal sig is to be ignored.

             Note: the signal SIGKILL cannot be ignored.

          function address -  catch signal
             Upon receipt of the signal sig, the receiving process is
             to execute the signal-catching function pointed to by
             func.  The signal number sig will be passed as the only
             argument to the signal-catching function.  Additional
             arguments are passed to the signal-catching function for
             hardware-generated signals.  Before entering the signal-
             catching function, the value of func for the caught
             signal will be set to SIGDFL unless the signal is
             SIGILL, SIGTRAP, or SIGPWR.

             Upon return from the signal-catching function, the
             receiving process will resume execution at the point it
             was interrupted.

             When a signal that is to be caught occurs during a read,
             a write, an open, or an ioctl system call on a slow
             device (like a terminal; but not a file), during a pause
             system call, or during a wait system call that does not
             return immediately due to the existence of a previously
             stopped or zombie process, the signal-catching function
             will be executed and then the interrupted system call may
             return a -1 to the calling process with errno set to
             EINTR.

             Note: The signal SIGKILL cannot be caught.

          A call to signal cancels a pending signal sig except for a
          pending SIGKILL signal.

          signal will fail if sig is an illegal signal number,
          including SIGKILL.  [EINVAL]

          If a process uses job control, or if it is invoked by a
          shell using job control, the process may receive an extended
          set of signals.  These are described in sigvec(2).

     RETURN VALUE
          Upon successful completion, signal returns the previous
          value of func for the specified signal sig.  Otherwise, a
          value of -1 is returned and errno is set to indicate the



     Page 3                                        (last mod. 1/15/87)





     signal(3)                                               signal(3)



          error.

     SEE ALSO
          kill(1), kill(2), pause(2), ptrace(2), set42sig(2).
          setcompat(2).  wait(2), setjmp(3C).

     WARNING
          Two other signals that behave differently than the signals
          described above exist in this release of the system; they
          are:

               SIGCLD  18   death of a child (reset when caught)
               SIGPWR  19   power fail (not reset when caught)

          There is no guarantee that, in future releases of the UNIX®
          system, these signals will continue to behave as described
          below; they are included only for compatibility with other
          versions of the UNIX system.  Their use in new programs is
          strongly discouraged.

          For these signals, func is assigned one of three values:
          SIGDFL, SIGIGN, or a function address.  The actions
          prescribed by these values of are as follows:

          SIGDFL - ignore signal
             The signal is to be ignored.

          SIGIGN - ignore signal
             The signal is to be ignored.  Also, if sig is SIGCLD, the
             calling process's child processes will not create zombie
             processes when they terminate; see exit(2).

          function address - catch signal
             If the signal is SIGPWR, the action to be taken is the
             same as that described above for func equal to function
             address.  The same is true if the signal is SIGCLD
             except, that while the process is executing the signal-
             catching function, any received SIGCLD signals will be
             queued and the signal-catching function will be
             continually reentered until the queue is empty.

          The SIGCLD affects two other system calls (wait(2), and
          exit(2)) in the following ways:

          wait   If the func value of SIGCLD is set to SIGIGN and a
                 wait is executed, the wait will block until all of
                 the calling process's child processes terminate; it
                 will then return a value of -1 with errno set to
                 ECHILD.

          exit   If in the exiting process's parent process the func
                 value of SIGCLD is set to SIGIGN, the exiting



     Page 4                                        (last mod. 1/15/87)





     signal(3)                                               signal(3)



                 process will not create a zombie process.

          When processing a pipeline, the shell makes the last process
          in the pipeline the parent of the proceeding processes.  A
          process that may be piped into in this manner (and thus
          become the parent of other processes) should take care not
          to set SIGCLD to be caught.

     BUGS
          If a repeated signal arrives before the last one can be
          reset, there is no chance to catch it.

          The type specification of the routine and its func argument
          are problematical.

          The symbols sighnd and sigtrap are globally defined symbols
          used by signal and are reserved words.






































     Page 5                                        (last mod. 1/15/87)



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026