summaryrefslogtreecommitdiffstats
path: root/man2/signal.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/signal.2')
-rw-r--r--man2/signal.2299
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)