pcntl_signal
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_signal — Installs a signal handler
Parameters
signal
-
The signal number.
handler
-
The signal handler. This may be either a callable, which
will be invoked to handle the signal, or either of the two global
constants 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:
signo
-
The signal being handled.
siginfo
-
If operating systems supports siginfo_t structures, this will be an array of signal information dependent on the signal.
Note:
When a handler is set to an object method, the reference count of that
object is increased, which makes it persist until the handler is
changed to something else, or the script ends.
restart_syscalls
-
Specifies whether system call restarting should be used when this
signal arrives.
Note:
Although this parameter defaults to true, that default does not
apply to SIGALRM: when
restart_syscalls is not passed and
signal is SIGALRM,
system call restarting is disabled. Pass true explicitly to
enable system call restarting for SIGALRM.
Return Values
Returns true on success or false on failure.
Examples
Example #1 pcntl_signal() example
<?php
pcntl_async_signals(true);
// 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...\n";
break;
default:
// handle all other signals
}
}
echo "Installing signal handler...\n";
// setup signal handlers
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
pcntl_signal(SIGUSR1, "sig_handler");
// or use an object
// pcntl_signal(SIGUSR1, array($obj, "do_something"));
echo"Generating signal SIGUSR1 to self...\n";
// send SIGUSR1 to current process id
// posix_* functions require the posix extension
posix_kill(posix_getpid(), SIGUSR1);
echo "Done\n";
?>
Notes
pcntl_signal() does not stack the signal handlers, but
replaces them.
Dispatch Methods
There are several methods of dispatching signal handlers:
When signals are dispatched asynchronously or using tick-based execution, blocking functions like
sleep() may be interrupted.