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 — Planifie une alarme pour délivrer un signal
Description
int pcntl_alarm
( int
$seconds
)
Créé un compte à rebours qui enverra un signal
SIGALRM au processus après
seconds secondes.
Tout appel à pcntl_alarm() annulera les
comptes à rebours précédemment configurés.
Liste de paramètres
-
seconds -
Le nombre de secondes à attendre. Si
secondsvaut 0, aucune nouvelle alarme ne sera créée.
Valeurs de retour
Retourne le temps en seconde qui reste avant l'exécution de l'alarme précédente, ou 0 si aucune alarme n'était planifiée.
thessoro at gmail dot com
20-Apr-2011 09:05
j at ukr-info dot net
20-Oct-2005 04: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(;;) {
}
?>
