Asynchronous Signal Handling

The executor of PHP’s runtime was extended with safe time-out and interrupt handling capabilities. This allows for callbacks to be called on each loop iteration, userland function entry, or internal function exit and does not require the clumsy, old-fashioned ticks feature.

Asynchronous signal handling is turned off by default. To enable it, simply call pcntl_async_signals(1). You can then use signal handling functions such as pcntl_signal() and pcntl_alarm(), for instance, as usual:

pcntl_signal(
    SIGALRM,
    function () {
        throw new Exception;
    },
    true
);

pcntl_async_signals(true);
pcntl_alarm(1);

sleep(2);

In the example shown above, we register an anonymous function as a callback for the SIGALRM event using the pcntl_signal() function. We then use the pcntl_alarm() function to instruct PHP to trigger an SIGALRM event after one second. We then sleep() for two seconds but are interrupted by an exception after one second because of the alarm:

Fatal error: Uncaught Exception in example.php:5
Stack trace:
#0 example.php(13): {closure}(14, Array)
#1 {main}
  thrown in example.php on line 5

Please note that such an alarm cannot be triggered while the PHP runtime is performing an I/O operation or is executing library code that is used by an extension. An alarm such as the one shown in the previous example will then be triggered as soon as the PHP runtime finished an I/O operation, for instance.