note 110048 deleted from function.pcntl-signal-dispatch by googleguy
| From: | googleguy@php.net | Date: | Fri, 14 Sep 2012 12:59:40 +0000 |
| Subject: | note 110048 deleted from function.pcntl-signal-dispatch by googleguy | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-190764@lists.php.net to get a copy of this message | ||
Note Submitter: admin at infarmer dot ru
----
<?php
function signal_handler($signal) {
global $i;
print "Caught SIGALRM ($i) \n";
pcntl_alarm(1);
}
pcntl_signal(SIGALRM, "signal_handler", true);
pcntl_alarm(1);
// ÐбÑабоÑка Ñигнала на
каждом Ñике
declare(ticks = 1);
while(true){
$i=1;
// ÐºÐ°ÐºÐ°Ñ Ñо ÑложнаÑ
вÑÑиÑлиÑелÑÐ½Ð°Ñ ÑабоÑа,
while($i<10000000){
$i++;
}
echo 'end'.PHP_EOL;
// ÐдиноÑÐ°Ð·Ð¾Ð²Ð°Ñ Ð¾Ð±ÑабоÑка
Ñигнала
# pcntl_signal_dispatch();
}
?>
OUTPUT:
> php test.php
Caught SIGALRM (1376814)
Caught SIGALRM (4130636)
Caught SIGALRM (6884781)
Caught SIGALRM (9637491)
end
Caught SIGALRM (1013758)
^C
========
ТепеÑÑ ÐµÑли
закомменÑиÑоваÑÑ declare(ticks = 1); и
ÑаÑкомменÑиÑоваÑÑ pcntl_signal_dispatch();
Увидим ÑледÑÑÑее:
OUTPUT:
> php test.php
Caught SIGALRM (10000000)
end
Caught SIGALRM (10000000)
^C
РвÑе ÑÑо ознаÑаеÑ, ÑÑо
Ñигнал в пеÑвом ÑлÑÑае ( declare(ticks = 1)
) пÑеÑÐ²ÐµÑ ÑабоÑÑ ÑкÑипÑа,
вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ Ð¿ÑивÑзаннÑÑ
ÑÑнкÑÐ¸Ñ Ð¸ веÑнеÑÑÑ Ð¸
пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ ÑабоÑÑ. РпÑи
иÑполÑзовании pcntl_signal_dispatch() -
обÑабоÑка Ñигнала бÑдеÑ
пÑоизведена когда Ð¼Ñ Ñами
ÑÑо Ñкажем.
ÐÑÑаÑи, еÑли вмеÑÑо ( ÐºÐ°ÐºÐ°Ñ Ñо
ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð²ÑÑиÑлиÑелÑнаÑ
ÑабоÑа ) - подÑÑавиÑÑ <?php sleep(5) ?>,
Ñо ÑÑо пÑи иÑполÑзовании
pcntl_signal_dispatch(), ÑÑо пÑи declare(ticks = 1) - ÑигналÑ
бÑдÑÑ ÑÑабаÑÑваÑÑ ÐºÐ°Ð¶Ð´ÑÑ
ÑекÑндÑ.