pcntl_signal
pcntl_signal
Installs a signal handler
bool **pcntl_signal** int $signal $handler bool $restart_syscalls
The function installs a new
signal handler or replaces the current signal handler for the signal indicated by .
pcntl_signal``signal
signalThe signal number.
handler
The signal handler. This may be either a , which
will be invoked to handle the signal, or either of the two global
constants or ,
which will ignore the signal or restore the default signal handler
respectively.
callable``SIG_IGN``SIG_DFL
If a is given, it must implement the following
signature:
`callable`
```php
void **** int $signo mixed $siginfo
`signal`The signal being handled.
`siginfo`If operating systems supports siginfo_t structures, this will be an array of signal information dependent on the signal.
> **Opmerking:** > 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.
`restart_syscalls`Specifies whether system call restarting should be used when this
signal arrives.
return.success
**Voorbeeld: example**
```php
<?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";
?>
doesn't stack the signal handlers, but replaces them.
pcntl_signal
Dispatch Methods
There are several methods of dispatching signal handlers:
pcntl_async_signalstickpcntl_signal_dispatch
When signals are dispatched asynchronously or using tick-based execution, blocking functions like
may be interrupted.
sleep
Signal (IPC)pcntl_async_signals``pcntl_fork``pcntl_signal_dispatch``pcntl_waitpid