Annotation of researchv10dc/man/manb/sigsys.2j, revision 1.1.1.1

1.1       root        1: .TH SIGSYS 2J
                      2: .UC 4
                      3: .ie t .ds d \(dg
                      4: .el .ds d \z'|+'
                      5: .ie t .ds b \(bu
                      6: .el .ds b @
                      7: .SH NAME
                      8: sigsys \- catch or ignore signals
                      9: .SH SYNOPSIS
                     10: .nf
                     11: .B #include <signal.h>
                     12: .PP
                     13: .B (*sigsys(sig, func))()
                     14: .B void (*func)();
                     15: .PP
                     16: .B cc ... \-ljobs
                     17: .fi
                     18: .SH DESCRIPTION
                     19: .IR N.B. :
                     20: The system currently supports two signal implementations.
                     21: The one described in
                     22: .IR signal (2)
                     23: is standard in version 7 UNIX systems,
                     24: and retained for backward compatibility
                     25: as it is different
                     26: in a number of ways.
                     27: The one described here (with the interface in
                     28: .IR sigset (3))
                     29: provides for the needs of the job control mechanisms (see
                     30: .IR jobs (3))
                     31: used by
                     32: .IR csh (1),
                     33: and corrects the bugs in the standard implementation of signals,
                     34: allowing programs which process interrupts to be written reliably.
                     35: .PP
                     36: The routine
                     37: .I sigsys
                     38: is not normally called directly; rather the routines of
                     39: .IR sigset (3)
                     40: should be used.
                     41: These routines are kept in the ``jobs'' library, accessible by
                     42: giving the loader option
                     43: .B \-ljobs.
                     44: The features described here are less portable then those of
                     45: .IR signal (2)
                     46: and should not be used in programs which are
                     47: to be moved to other versions of UNIX.
                     48: .PP
                     49: A signal
                     50: is generated by some abnormal event,
                     51: initiated by a user at a terminal (quit, interrupt, stop),
                     52: by a program error (bus error, etc.),
                     53: by request of another program (kill),
                     54: or when a process is stopped because it wishes to access
                     55: its control terminal while in the background (see
                     56: .IR tty (4)).
                     57: Signals are optionally generated
                     58: when a process resumes after being stopped,
                     59: when the status of child processes changes,
                     60: or when input is ready at the control terminal.
                     61: Most signals cause termination of the receiving process if no action
                     62: is taken; some signals instead cause the process receiving them
                     63: to be stopped, or are simply discarded if the process has not
                     64: requested otherwise.
                     65: Except for the SIGKILL and SIGSTOP
                     66: signals which cannot be blocked, the
                     67: .I sigsys
                     68: call allows signals either to be ignored,
                     69: held until a later time (protecting critical sections in the process),
                     70: or to cause an interrupt to a specified location.
                     71: Here is the list of all signals with names as in the include file.
                     72: .LP
                     73: .nf
                     74: .ta \w'SIGMMMM 'u +\w'15*  'u
                     75: SIGHUP 1       hangup
                     76: SIGINT 2       interrupt
                     77: SIGQUIT        3*      quit
                     78: SIGILL 4*      illegal instruction (not reset when caught)
                     79: SIGTRAP        5*      trace trap (not reset when caught)
                     80: SIGIOT 6*      IOT instruction
                     81: SIGEMT 7*      EMT instruction
                     82: SIGFPE 8*      floating point exception
                     83: SIGKILL        9       kill (cannot be caught, held or ignored)
                     84: SIGBUS 10*     bus error
                     85: SIGSEGV        11*     segmentation violation
                     86: SIGSYS 12*     bad argument to system call
                     87: SIGPIPE        13      write on a pipe with no one to read it
                     88: SIGALRM        14      alarm clock
                     89: SIGTERM        15      software termination signal
                     90:        16      unassigned
                     91: SIGSTOP        17\*d   stop (cannot be caught, held or ignored)
                     92: SIGTSTP        18\*d   stop signal generated from keyboard
                     93: SIGCONT        19\*b   continue after stop
                     94: SIGCHLD        20\*b   child status has changed
                     95: SIGTTIN        21\*d   background read attempted from control terminal
                     96: SIGTTOU        22\*d   background write attempted to control terminal
                     97: SIGTINT        23\*b   input record is available at control terminal
                     98: SIGXCPU        24      cpu time limit exceeded (see \fIvlimit\fR(2))
                     99: SIGXFSZ        25      file size limit exceeded (see \fIvlimit\fR(2))
                    100: .fi
                    101: .PP
                    102: The starred signals in the list above cause a core image
                    103: if not caught, held or ignored.
                    104: .PP
                    105: If
                    106: .I func
                    107: is SIG_DFL, the default action
                    108: for signal
                    109: .I sig
                    110: is reinstated; this default is termination
                    111: (with a core image for starred signals)
                    112: except for signals marked with \*b or \*d.
                    113: Signals marked with \*b are discarded if the action is SIG_DFL; signals marked
                    114: with \*d cause the process to stop.
                    115: If
                    116: .I func
                    117: is SIG_HOLD
                    118: the signal is remembered if it occurs, but not presented to the process;
                    119: it may be presented later if the process changes the action for the signal.
                    120: If
                    121: .I func
                    122: is SIG_IGN the signal is subsequently ignored,
                    123: and pending instances of the signal are discarded (i.e. if the
                    124: action was previously SIG_HOLD.)
                    125: Otherwise
                    126: when the signal occurs
                    127: .I func
                    128: will be called.
                    129: .PP
                    130: A return from the function will
                    131: continue the process at the point it was interrupted.
                    132: Except as indicated,
                    133: a signal, set with
                    134: .I sigsys,
                    135: is reset to SIG_DFL after being caught.  However by
                    136: specifying DEFERSIG(func) as the last argument to
                    137: .I sigsys,
                    138: one causes the action to be set to
                    139: SIG_HOLD before the interrupt is taken, so that recursive instances
                    140: of the signal cannot occur during handling of the signal.
                    141: .PP
                    142: When a caught signal occurs
                    143: during certain system calls, the call terminates prematurely.
                    144: In particular this can occur
                    145: during a
                    146: .I read
                    147: or
                    148: .IR write (2)
                    149: on a slow device (like a terminal; but not a file)
                    150: and during a
                    151: .I pause
                    152: or
                    153: .IR wait (2).
                    154: When a signal occurs
                    155: during one of these calls,
                    156: the saved user status
                    157: is arranged in such a way that,
                    158: when return from the
                    159: signal-catching takes place, it will appear that the
                    160: system call returned an error status.
                    161: The user's program may then, if it wishes,
                    162: re-execute the call.
                    163: .I Read
                    164: and
                    165: .I write
                    166: calls which have done no I/O,
                    167: .IR ioctl s
                    168: blocked with SIGTTOU,
                    169: and
                    170: .I wait3
                    171: calls are restarted.
                    172: .PP
                    173: The value of
                    174: .I sigsys
                    175: is the previous (or initial)
                    176: value of
                    177: .I func
                    178: for the particular signal.
                    179: .PP
                    180: The system provides two other functions by oring bits into the
                    181: signal number:
                    182: SIGDOPAUSE causes the process to
                    183: .I pause
                    184: after changing the signal action.  It can be used to atomically
                    185: re-enable a held signal which was being processed and wait for
                    186: another instance of the signal.
                    187: SIGDORTI causes the system to simulate an
                    188: .I rei
                    189: instruction
                    190: clearing the mark the system placed on the stack at the point of
                    191: interrupt before checking for further signals to be presented due
                    192: to the specified change in signal actions.  This allows a
                    193: signal package such as
                    194: .IR sigset (3)
                    195: to dismiss from interrupts cleanly removing the old state from
                    196: the stack before another instance of the interrupt is presented.
                    197: .PP
                    198: After a
                    199: .IR fork (2)
                    200: or
                    201: .IR vfork (2)
                    202: the child inherits
                    203: all signals.
                    204: .IR  Exec (2)
                    205: resets all
                    206: caught signals to default action; held signals remain held
                    207: and ignored signals remain ignored.
                    208: .SH "SEE ALSO"
                    209: kill(1),
                    210: ptrace(2), kill(2),
                    211: jobs(3), sigset(3), setjmp(3),
                    212: tty(4)
                    213: .SH DIAGNOSTICS
                    214: The value BADSIG is returned if the
                    215: given signal is out of range.
                    216: .SH BUGS
                    217: The job control facilities are not available in standard version 7 UNIX.
                    218: These facilities are still under development and may change in future
                    219: releases of the system as better inter-process communication facilities
                    220: and support for virtual terminals become available.  The options and
                    221: specifications of this facility and the system calls supporting it
                    222: are thus subject to change.
                    223: .PP
                    224: Since only one signal action can be changed at a time, it is not
                    225: possible to get the effect of SIGDOPAUSE for more than one signal
                    226: at a time.
                    227: .PP
                    228: The traps (listed below) should be distinguishable by extra arguments
                    229: to the signal handler, and all hardware supplied parameters should
                    230: be made available to the signal routine.
                    231: .SH "ASSEMBLER (PDP-11)"
                    232: (signal = 48.)
                    233: .br
                    234: .B sys  signal; sig; label
                    235: .br
                    236: (old label in r0)
                    237: .PP
                    238: If
                    239: .I label
                    240: is 0,
                    241: default action is reinstated.
                    242: If
                    243: .I label
                    244: is 1, the signal is ignored.
                    245: If
                    246: .I label
                    247: is 3, the signal is held.
                    248: Any other even
                    249: .I label
                    250: specifies an address in the process
                    251: where an interrupt is simulated.
                    252: If label is otherwise odd, the signal is sent to the function
                    253: whose address is the label with the low bit cleared
                    254: with the action set to SIG_HOLD.
                    255: (Thus DEFERSIG is indicated by the low bit of a signal catch address.
                    256: An RTI or RTT instruction will return from the
                    257: interrupt.)
                    258: .SH "NOTES (VAX-11)"
                    259: The following defines the mapping of hardware traps to signals:
                    260: .LP
                    261: .ta \w'     Floating/decimal divide by zero   'u +\w'15*  'u +8n
                    262: .nf
                    263: Arithmetic traps:
                    264:    Integer overflow    SIGFPE
                    265:    Integer division by zero    SIGFPE
                    266:    Floating overflow   SIGFPE
                    267:    Floating underflow  SIGFPE
                    268:    Floating/decimal division by zero   SIGFPE
                    269:    Decimal overflow    SIGFPE
                    270:    Subscript-range     SIGFPE
                    271: Length access control  SIGSEGV
                    272: Protection violation   SIGBUS
                    273: Reserved instruction   SIGILL
                    274: Customer-reserved instr.       SIGEMT
                    275: Reserved operand       SIGILL
                    276: Reserved addressing    SIGILL
                    277: Trace pending  SIGTRAP
                    278: Bpt instruction        SIGTRAP
                    279: Compatibility-mode     SIGEMT
                    280: Chme   SIGILL
                    281: Chms   SIGILL
                    282: Chmu   SIGILL
                    283: .fi

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.