If your process uses SIGALRM and sleep() at the same time, the alarm set could make sleep() to return prematurely.
To avoid this and ensure your process waits a number of seconds you could use a function or class similar to this one:
<?php
class SleepWorkaroundForSIGALRM {
private $time;
function __construct($seconds) {
$this->time = time() + $seconds;
while ($this->time >= time()) {
sleep(1);
}
}
?>
pcntl_alarm
(PHP 4 >= 4.3.0, PHP 5)
pcntl_alarm — Set an alarm clock for delivery of a signal
Descrição
int pcntl_alarm
( int $seconds
)
Creates a timer that will send a SIGALRM signal to the process after the given number of seconds. Any call to pcntl_alarm() will cancel any previously set alarm.
Parâmetros
- seconds
-
The number of seconds to wait. If seconds is zero, no new alarm is created.
Valor Retornado
Returns the time in seconds that any previously scheduled alarm had remaining before it was to be delivered, or 0 if there was no previously scheduled alarm.
User Contributed Notes
pcntl_alarm
pcntl_alarm
thessoro at gmail dot com
20-Apr-2011 06:05
20-Apr-2011 06:05
j at ukr-info dot net
20-Oct-2005 02:51
20-Oct-2005 02:51
<?php
declare(ticks = 1);
function signal_handler($signal) {
print "Caught SIGALRM\n";
pcntl_alarm(5);
}
pcntl_signal(SIGALRM, "signal_handler", true);
pcntl_alarm(5);
for(;;) {
}
?>

PCNTL Funções