diff options
Diffstat (limited to 'man2/signal.2')
-rw-r--r-- | man2/signal.2 | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/man2/signal.2 b/man2/signal.2 new file mode 100644 index 000000000..9c989d138 --- /dev/null +++ b/man2/signal.2 @@ -0,0 +1,299 @@ +.\" Copyright (c) 2000 Andries Brouwer <aeb@cwi.nl> +.\" based on work by Rik Faith <faith@cs.unc.edu> +.\" and Mike Battersby <mike@starbug.apana.org.au>. +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.TH SIGNAL 2 2000-04-28 "Linux 2.2" "Linux Programmer's Manual" +.SH NAME +signal \- ANSI C signal handling +.SH SYNOPSIS +.B #include <signal.h> +.sp +.B typedef void (*sighandler_t)(int); +.sp +.BI "sighandler_t signal(int " signum ", sighandler_t " handler ); +.SH DESCRIPTION +The +.BR signal () +system call installs a new signal handler for the signal with number +.IR signum . +The signal handler is set to +.I sighandler +which may be a user specified function, or either +.B SIG_IGN +or +.BR SIG_DFL . + +Upon arrival of a signal with number +.I signum +the following happens. +If the corresponding handler is set to +.BR SIG_IGN , +then the signal is ignored. +If the handler is set to +.BR SIG_DFL , +then the default action associated to the signal (see +.BR signal (7)) +occurs. +Finally, if the handler is set to a function +.I sighandler +then first either the handler is reset to SIG_DFL +or an implementation-dependent blocking of the signal +is performed and next +.I sighandler +is called with argument +.IR signum . + +Using a signal handler function for a signal +is called "catching the signal". +The signals +.B SIGKILL +and +.B SIGSTOP +cannot be caught or ignored. + +.SH "RETURN VALUE" +The +.BR signal () +function returns the previous value of the signal handler, or +.B SIG_ERR +on error. + +.SH PORTABILITY +The original Unix +.BR signal () +would reset the handler to SIG_DFL, and System V +(and the Linux kernel and libc4,5) does the same. +On the other hand, BSD does not reset the handler, but blocks +new instances of this signal from occurring during a call of the handler. +The glibc2 library follows the BSD behaviour. + +If one on a libc5 system includes +.B "<bsd/signal.h>" +instead of +.B "<signal.h>" +then +.B signal +is redefined as +.B __bsd_signal +and signal has the BSD semantics. This is not recommended. + +If one on a glibc2 system defines a feature test +macro such as +.B _XOPEN_SOURCE +or uses a separate +.B sysv_signal +function, one obtains classical behaviour. This is not recommended. + +Trying to change the semantics of this call using +defines and includes is not a good idea. It is better to avoid +.B signal +altogether, and use +.BR sigaction (2) +instead. + +.SH NOTES +The effects of this call in a multi-threaded process are unspecified. +.PP +The routine +.I handler +must be very careful, since processing elsewhere was interrupted +at some arbitrary point. POSIX has the concept of "safe function". +If a signal interrupts an unsafe function, and +.I handler +calls an unsafe function, then the behavior is undefined. Safe +functions are listed explicitly in the various standards. +The POSIX 1003.1-2003 list is + +_Exit() +_exit() +abort() +accept() +access() +aio_error() +aio_return() +aio_suspend() +alarm() +bind() +cfgetispeed() +cfgetospeed() +cfsetispeed() +cfsetospeed() +chdir() +chmod() +chown() +clock_gettime() +close() +connect() +creat() +dup() +dup2() +execle() +execve() +fchmod() +fchown() +fcntl() +fdatasync() +fork() +fpathconf() +fstat() +fsync() +ftruncate() +getegid() +geteuid() +getgid() +getgroups() +getpeername() +getpgrp() +getpid() +getppid() +getsockname() +getsockopt() +getuid() +kill() +link() +listen() +lseek() +lstat() +mkdir() +mkfifo() +open() +pathconf() +pause() +pipe() +poll() +posix_trace_event() +pselect() +raise() +read() +readlink() +recv() +recvfrom() +recvmsg() +rename() +rmdir() +select() +sem_post() +send() +sendmsg() +sendto() +setgid() +setpgid() +setsid() +setsockopt() +setuid() +shutdown() +sigaction() +sigaddset() +sigdelset() +sigemptyset() +sigfillset() +sigismember() +signal() +sigpause() +sigpending() +sigprocmask() +sigqueue() +sigset() +sigsuspend() +sleep() +socket() +socketpair() +stat() +symlink() +sysconf() +tcdrain() +tcflow() +tcflush() +tcgetattr() +tcgetpgrp() +tcsendbreak() +tcsetattr() +tcsetpgrp() +time() +timer_getoverrun() +timer_gettime() +timer_settime() +times() +umask() +uname() +unlink() +utime() +wait() +waitpid() +write(). +.PP +According to POSIX, the behaviour of a process is undefined after it +ignores a +.BR SIGFPE , +.BR SIGILL , +or +.B SIGSEGV +signal that was not generated by the +.BR kill (2) +or the +.BR raise (3) +functions. +Integer division by zero has undefined result. +On some architectures it will generate a +.B SIGFPE +signal. +(Also dividing the most negative integer by \-1 may generate +.BR SIGFPE .) +Ignoring this signal might lead to an endless loop. +.PP +According to POSIX (3.3.1.3) it is unspecified what happens when +.B SIGCHLD +is set to +.BR SIG_IGN . +Here the BSD and SYSV behaviours differ, causing BSD software +that sets the action for +.B SIGCHLD +to +.B SIG_IGN +to fail on Linux. +.PP +The use of +.B sighandler_t +is a GNU extension. +Various versions of libc predefine this type; libc4 and libc5 define +.IR SignalHandler , +glibc defines +.I sig_t +and, when +.B _GNU_SOURCE +is defined, also +.IR sighandler_t . +.SH "CONFORMING TO" +ANSI C + +.SH "SEE ALSO" +.BR kill (1), +.BR alarm (2), +.BR kill (2), +.BR killpg (2), +.BR pause (2), +.BR sigaction (2), +.BR sigvec (2), +.BR raise (3), +.BR sigsetops (3), +.BR signal (7) |