[Linux manuál]
Návod, kniha: Linux Programmer's Manual
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t
handler);
Upon arrival of a signal with number signum the following happens. If the
corresponding handler is set to SIG_IGN, then the signal is ignored. If
the handler is set to SIG_DFL, then the default action associated to
the signal (see signal(7)) occurs. Finally, if the handler is set to a
function sighandler then first either the handler is reset to SIG_DFL
or an implementation-dependent blocking of the signal is performed and next
sighandler is called with argument signum.
Using a signal handler function for a signal is called "catching the
signal". The signals SIGKILL and SIGSTOP cannot be caught
or ignored.
If one on a libc5 system includes <bsd/signal.h> instead of
<signal.h> then signal is redefined as __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
_XOPEN_SOURCE or uses a separate 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 signal altogether, and use
sigaction(2) instead.
_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().
According to POSIX, the behaviour of a process is undefined after it ignores a
SIGFPE, SIGILL, or SIGSEGV signal that was not generated
by the kill(2) or the raise(3) functions. Integer division by
zero has undefined result. On some architectures it will generate a
SIGFPE signal. (Also dividing the most negative integer by -1 may
generate SIGFPE.) Ignoring this signal might lead to an endless loop.
According to POSIX (3.3.1.3) it is unspecified what happens when SIGCHLD
is set to SIG_IGN. Here the BSD and SYSV behaviours differ, causing BSD
software that sets the action for SIGCHLD to SIG_IGN to fail on
Linux.
The use of sighandler_t is a GNU extension. Various versions of libc
predefine this type; libc4 and libc5 define SignalHandler, glibc
defines sig_t and, when _GNU_SOURCE is defined, also
sighandler_t.
signal: Zpracování signálu ANSI C
Originální popis anglicky: signal - ANSI C signal handlingNávod, kniha: Linux Programmer's Manual
STRUČNĚ
#include <signal.h>POPIS / INSTRUKCE
The signal() system call installs a new signal handler for the signal with number signum. The signal handler is set to sighandler which may be a user specified function, or either SIG_IGN or SIG_DFL.NÁVRATOVÁ HODNOTA
The signal() function returns the previous value of the signal handler, or SIG_ERR on error.PORTABILITY
The original Unix 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.NOTES
The effects of this call in a multi-threaded process are unspecified. The routine 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 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 isODPOVÍDAJÍCÍ
ANSI CSOUVISEJÍCÍ
kill(1), alarm(2), kill(2), killpg(2), pause(2), sigaction(2), sigvec(2), raise(3), sigsetops(3), signal(7)| 2000-04-28 | Linux 2.2 |