|
|
1.1 ! root 1: .\" Copyright (c) 1980 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)sigvec.2 6.3 (Berkeley) 1/8/86 ! 6: .\" ! 7: .TH SIGVEC 2 "January 8, 1986" ! 8: .UC 4 ! 9: .ie t .ds d \(dg ! 10: .el .ds d \z'|+' ! 11: .ie t .ds b \(bu ! 12: .el .ds b @ ! 13: .SH NAME ! 14: sigvec \- software signal facilities ! 15: .SH SYNOPSIS ! 16: .nf ! 17: .B #include <signal.h> ! 18: .PP ! 19: .B struct sigvec { ! 20: .B int (*sv_handler)(); ! 21: .B int sv_mask; ! 22: .B int sv_flags; ! 23: .B }; ! 24: .PP ! 25: .B sigvec(sig, vec, ovec) ! 26: .B int sig; ! 27: .B struct sigvec *vec, *ovec; ! 28: .fi ! 29: .SH DESCRIPTION ! 30: The system defines a set of signals that may be delivered to a process. ! 31: Signal delivery resembles the occurence of a hardware interrupt: ! 32: the signal is blocked from further occurrence, the current process ! 33: context is saved, and a new one is built. A process may specify a ! 34: .I handler ! 35: to which a signal is delivered, or specify that a signal is to be ! 36: .I blocked ! 37: or ! 38: .IR ignored . ! 39: A process may also specify that a default action is to be taken ! 40: by the system when a signal occurs. ! 41: Normally, signal handlers execute on the current stack ! 42: of the process. This may be changed, on a per-handler basis, ! 43: so that signals are taken on a special ! 44: .IR "signal stack" . ! 45: .PP ! 46: All signals have the same ! 47: .IR priority . ! 48: Signal routines execute with the signal that caused their ! 49: invocation ! 50: .IR blocked , ! 51: but other signals may yet occur. ! 52: A global ! 53: .I "signal mask" ! 54: defines the set of signals currently blocked from delivery ! 55: to a process. The signal mask for a process is initialized ! 56: from that of its parent (normally 0). It ! 57: may be changed with a ! 58: .IR sigblock (2) ! 59: or ! 60: .IR sigsetmask (2) ! 61: call, or when a signal is delivered to the process. ! 62: .PP ! 63: When a signal ! 64: condition arises for a process, the signal is added to a set of ! 65: signals pending for the process. If the signal is not currently ! 66: .I blocked ! 67: by the process then it is delivered to the process. When a signal ! 68: is delivered, the current state of the process is saved, ! 69: a new signal mask is calculated (as described below), ! 70: and the signal handler is invoked. The call to the handler ! 71: is arranged so that if the signal handling routine returns ! 72: normally the process will resume execution in the context ! 73: from before the signal's delivery. ! 74: If the process wishes to resume in a different context, then it ! 75: must arrange to restore the previous context itself. ! 76: .PP ! 77: When a signal is delivered to a process a new signal mask is ! 78: installed for the duration of the process' signal handler ! 79: (or until a ! 80: .I sigblock ! 81: or ! 82: .I sigsetmask ! 83: call is made). ! 84: This mask is formed by taking the current signal mask, ! 85: adding the signal to be delivered, and ! 86: .IR or 'ing ! 87: in the signal mask associated with the handler to be invoked. ! 88: .PP ! 89: .I Sigvec ! 90: assigns a handler for a specific signal. If ! 91: .I vec ! 92: is non-zero, it ! 93: specifies a handler routine and mask ! 94: to be used when delivering the specified signal. ! 95: Further, if the SV_ONSTACK bit is set in ! 96: .I sv_flags, ! 97: the system will deliver the signal to the process on a ! 98: .IR "signal stack" , ! 99: specified with ! 100: .IR sigstack (2). ! 101: If ! 102: .I ovec ! 103: is non-zero, the previous handling information for the signal ! 104: is returned to the user. ! 105: .PP ! 106: The following is a list of all signals ! 107: with names as in the include file ! 108: .RI < signal.h >: ! 109: .LP ! 110: .nf ! 111: .ta \w'SIGVTALRM 'u +\w'15* 'u ! 112: SIGHUP 1 hangup ! 113: SIGINT 2 interrupt ! 114: SIGQUIT 3* quit ! 115: SIGILL 4* illegal instruction ! 116: SIGTRAP 5* trace trap ! 117: SIGIOT 6* IOT instruction ! 118: SIGEMT 7* EMT instruction ! 119: SIGFPE 8* floating point exception ! 120: SIGKILL 9 kill (cannot be caught, blocked, or ignored) ! 121: SIGBUS 10* bus error ! 122: SIGSEGV 11* segmentation violation ! 123: SIGSYS 12* bad argument to system call ! 124: SIGPIPE 13 write on a pipe with no one to read it ! 125: SIGALRM 14 alarm clock ! 126: SIGTERM 15 software termination signal ! 127: SIGURG 16\*b urgent condition present on socket ! 128: SIGSTOP 17\*d stop (cannot be caught, blocked, or ignored) ! 129: SIGTSTP 18\*d stop signal generated from keyboard ! 130: SIGCONT 19\*b continue after stop (cannot be blocked) ! 131: SIGCHLD 20\*b child status has changed ! 132: SIGTTIN 21\*d background read attempted from control terminal ! 133: SIGTTOU 22\*d background write attempted to control terminal ! 134: SIGIO 23\*b i/o is possible on a descriptor (see \fIfcntl\fP(2)) ! 135: SIGXCPU 24 cpu time limit exceeded (see \fIsetrlimit\fP(2)) ! 136: SIGXFSZ 25 file size limit exceeded (see \fIsetrlimit\fP(2)) ! 137: SIGVTALRM 26 virtual time alarm (see \fIsetitimer\fP(2)) ! 138: SIGPROF 27 profiling timer alarm (see \fIsetitimer\fP(2)) ! 139: SIGWINCH 28\*b window size change ! 140: SIGUSR1 30 user defined signal 1 ! 141: SIGUSR2 31 user defined signal 2 ! 142: .fi ! 143: .PP ! 144: The starred signals in the list above cause a core image ! 145: if not caught or ignored. ! 146: .PP ! 147: Once a signal handler is installed, it remains installed ! 148: until another ! 149: .I sigvec ! 150: call is made, or an ! 151: .IR execve (2) ! 152: is performed. ! 153: The default action for a signal may be reinstated by setting ! 154: .I sv_handler ! 155: to SIG_DFL; this default is termination ! 156: (with a core image for starred signals) ! 157: except for signals marked with \*b or \*d. ! 158: Signals marked with \*b are discarded if the action ! 159: is SIG_DFL; signals marked ! 160: with \*d cause the process to stop. ! 161: If ! 162: .I sv_handler ! 163: is SIG_IGN the signal is subsequently ignored, ! 164: and pending instances of the signal are discarded. ! 165: .PP ! 166: If a caught signal occurs during certain system calls, ! 167: the call is normally restarted. ! 168: The call can be forced to terminate prematurely with an ! 169: EINTR error return by setting the SV_INTERRUPT bit in ! 170: .I sv_flags. ! 171: The affected system calls are ! 172: .IR read (2) ! 173: or ! 174: .IR write (2) ! 175: on a slow device (such as a terminal; but not a file) ! 176: and during a ! 177: .IR wait (2). ! 178: .PP ! 179: After a ! 180: .IR fork (2) ! 181: or ! 182: .IR vfork (2) ! 183: the child inherits ! 184: all signals, the signal mask, the signal stack, ! 185: and the restart/interrupt flags. ! 186: .PP ! 187: .IR Execve (2) ! 188: resets all ! 189: caught signals to default action and ! 190: resets all signals to be caught on the user stack. ! 191: Ignored signals remain ignored; ! 192: the signal mask remains the same; ! 193: signals that interrupt system calls continue to do so. ! 194: .SH NOTES ! 195: The mask specified in ! 196: .I vec ! 197: is not allowed to block SIGKILL, SIGSTOP, or SIGCONT. This ! 198: is done silently by the system. ! 199: .PP ! 200: The SV_INTERRUPT flag is not available in 4.2BSD, ! 201: hence it should not be used if backward compatibility is needed. ! 202: .SH "RETURN VALUE ! 203: A 0 value indicated that the call succeeded. A \-1 return value ! 204: indicates an error occurred and ! 205: .I errno ! 206: is set to indicated the reason. ! 207: .SH ERRORS ! 208: .I Sigvec ! 209: will fail and no new signal handler will be installed if one ! 210: of the following occurs: ! 211: .TP 15 ! 212: [EFAULT] ! 213: Either ! 214: .I vec ! 215: or ! 216: .I ovec ! 217: points to memory that is not a valid part of the process ! 218: address space. ! 219: .TP 15 ! 220: [EINVAL] ! 221: .I Sig ! 222: is not a valid signal number. ! 223: .TP 15 ! 224: [EINVAL] ! 225: An attempt is made to ignore or supply a handler for SIGKILL ! 226: or SIGSTOP. ! 227: .TP 15 ! 228: [EINVAL] ! 229: An attempt is made to ignore SIGCONT (by default SIGCONT ! 230: is ignored). ! 231: .SH "SEE ALSO" ! 232: kill(1), ! 233: ptrace(2), kill(2), ! 234: sigblock(2), sigsetmask(2), sigpause(2), ! 235: sigstack(2), sigvec(2), setjmp(3), siginterrupt(3), tty(4) ! 236: .SH "NOTES (VAX-11)" ! 237: The handler routine can be declared: ! 238: .PP ! 239: handler(sig, code, scp) ! 240: int sig, code; ! 241: struct sigcontext *scp; ! 242: .PP ! 243: Here ! 244: .I sig ! 245: is the signal number, into which the hardware faults and traps are ! 246: mapped as defined below. ! 247: .I Code ! 248: is a parameter that is either a constant ! 249: as given below or, for compatibility mode faults, the code provided by ! 250: the hardware (Compatibility mode faults are distinguished from the ! 251: other SIGILL traps by having PSL_CM set in the psl). ! 252: .I Scp ! 253: is a pointer to the ! 254: .I sigcontext ! 255: structure (defined in ! 256: .RI < signal.h >), ! 257: used to restore the context from before the signal. ! 258: .PP ! 259: The following defines the mapping of hardware traps to signals ! 260: and codes. All of these symbols are defined in ! 261: .RI < signal.h >: ! 262: .LP ! 263: .ta \w' Floating/decimal divide by zero 'u +\w'15* 'u +8n ! 264: .nf ! 265: Hardware condition Signal Code ! 266: ! 267: Arithmetic traps: ! 268: Integer overflow SIGFPE FPE_INTOVF_TRAP ! 269: Integer division by zero SIGFPE FPE_INTDIV_TRAP ! 270: Floating overflow trap SIGFPE FPE_FLTOVF_TRAP ! 271: Floating/decimal division by zero SIGFPE FPE_FLTDIV_TRAP ! 272: Floating underflow trap SIGFPE FPE_FLTUND_TRAP ! 273: Decimal overflow trap SIGFPE FPE_DECOVF_TRAP ! 274: Subscript-range SIGFPE FPE_SUBRNG_TRAP ! 275: Floating overflow fault SIGFPE FPE_FLTOVF_FAULT ! 276: Floating divide by zero fault SIGFPE FPE_FLTDIV_FAULT ! 277: Floating underflow fault SIGFPE FPE_FLTUND_FAULT ! 278: Length access control SIGSEGV ! 279: Protection violation SIGBUS ! 280: Reserved instruction SIGILL ILL_RESAD_FAULT ! 281: Customer-reserved instr. SIGEMT ! 282: Reserved operand SIGILL ILL_PRIVIN_FAULT ! 283: Reserved addressing SIGILL ILL_RESOP_FAULT ! 284: Trace pending SIGTRAP ! 285: Bpt instruction SIGTRAP ! 286: Compatibility-mode SIGILL hardware supplied code ! 287: Chme SIGSEGV ! 288: Chms SIGSEGV ! 289: Chmu SIGSEGV ! 290: .fi ! 291: .SH BUGS ! 292: This manual page is still confusing.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.