Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

pcntl_signal(3) [php man page]

PCNTL_SIGNAL(3) 							 1							   PCNTL_SIGNAL(3)

pcntl_signal - Installs a signal handler

SYNOPSIS
bool pcntl_signal (int $signo, callable|int $handler, [bool $restart_syscalls = true]) DESCRIPTION
The pcntl_signal(3) function installs a new signal handler or replaces the current signal handler for the signal indicated by $signo. PARAMETERS
o $signo - The signal number. o $handler - The signal handler. This may be either a callable, which will be invoked to handle the signal, or either of the two global con- stants SIG_IGN or SIG_DFL, which will ignore the signal or restore the default signal handler respectively. If a callable is given, it must implement the following signature: void handler (int $signo) o $signo - The signal being handled. Note Note that when you set a handler to an object method, that object's reference count is increased which makes it persist until you either change the handler to something else, or your script ends. o $restart_syscalls - Specifies whether system call restarting should be used when this signal arrives. RETURN VALUES
Returns TRUE on success or FALSE on failure. CHANGELOG
+--------+---------------------------------------------------+ |Version | | | | | | | Description | | | | +--------+---------------------------------------------------+ | 4.3.0 | | | | | | | As of PHP 4.3.0 PCNTL uses ticks as the signal | | | handle callback mechanism, which is much faster | | | than the previous mechanism. This change follows | | | the same semantics as using "user ticks". You | | | must use the declare() statement to specify the | | | locations in your program where callbacks are | | | allowed to occur for the signal handler to func- | | | tion properly (as used in the example below). | | | | +--------+---------------------------------------------------+ EXAMPLES
Example #1 pcntl_signal(3) example <?php // tick use required as of PHP 4.3.0 declare(ticks = 1); // signal handler function function sig_handler($signo) { switch ($signo) { case SIGTERM: // handle shutdown tasks exit; break; case SIGHUP: // handle restart tasks break; case SIGUSR1: echo "Caught SIGUSR1... "; break; default: // handle all other signals } } echo "Installing signal handler... "; // setup signal handlers pcntl_signal(SIGTERM, "sig_handler"); pcntl_signal(SIGHUP, "sig_handler"); pcntl_signal(SIGUSR1, "sig_handler"); // or use an object, available as of PHP 4.3.0 // pcntl_signal(SIGUSR1, array($obj, "do_something")); echo"Generating signal SIGUSR1 to self... "; // send SIGUSR1 to current process id // posix_* functions require the posix extension posix_kill(posix_getpid(), SIGUSR1); echo "Done "; ?> NOTES
pcntl_signal(3) doesn't stack the signal handlers, but replaces them. SEE ALSO
pcntl_fork(3), pcntl_waitpid(3). PHP Documentation Group PCNTL_SIGNAL(3)

Check Out this Related Man Page

BSD_SIGNAL(3)						     Linux Programmer's Manual						     BSD_SIGNAL(3)

NAME
bsd_signal - signal handling with BSD semantics SYNOPSIS
#define _XOPEN_SOURCE /* See feature_test_macros(7) */ #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t bsd_signal(int signum, sighandler_t handler); DESCRIPTION
The bsd_signal() function takes the same arguments, and performs the same task, as signal(2). The difference between the two is that bsd_signal() is guaranteed to provide reliable signal semantics, that is: a) the disposition of the signal is not reset to the default when the handler is invoked; b) delivery of further instances of the signal is blocked while the signal handler is executing; and c) if the handler interrupts a blocking system call, then the system call is automatically restarted. A portable application cannot rely on signal(2) to provide these guarantees. RETURN VALUE
The bsd_signal() function returns the previous value of the signal handler, or SIG_ERR on error. ERRORS
As for signal(2). CONFORMING TO
4.2BSD, POSIX.1-2001. POSIX.1-2008 removes the specification of bsd_signal(), recommending the use of sigaction(2) instead. NOTES
Use of bsd_signal() should be avoided; use sigaction(2) instead. On modern Linux systems, bsd_signal() and signal(2) are equivalent. But on older systems, signal(2) provided unreliable signal semantics; see signal(2) for details. The use of sighandler_t is a GNU extension; this type is only defined if the _GNU_SOURCE feature test macro is defined. SEE ALSO
sigaction(2), signal(2), sysv_signal(3), signal(7) COLOPHON
This page is part of release 3.44 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. 2009-03-15 BSD_SIGNAL(3)
Man Page