note 110048 added to function.pcntl-signal-dispatch

From: Date: Fri, 14 Sep 2012 12:24:48 +0000
Subject: note 110048 added to function.pcntl-signal-dispatch
Groups: php.notes 
Request: Send a blank email to php-notes+get-190763@lists.php.net to get a copy of this message
<?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) - сигналы будут срабатывать каждую секунду. ---- Server IP: 69.147.83.197 Probable Submitter: 31.13.19.105 ---- Manual Page -- http://www.php.net/manual/en/function.pcntl-signal-dispatch.php Edit -- https://master.php.net/note/edit/110048 Del: integrated -- https://master.php.net/note/delete/110048/integrated Del: useless -- https://master.php.net/note/delete/110048/useless Del: bad code -- https://master.php.net/note/delete/110048/bad+code Del: spam -- https://master.php.net/note/delete/110048/spam Del: non-english -- https://master.php.net/note/delete/110048/non-english Del: in docs -- https://master.php.net/note/delete/110048/in+docs Del: other reasons-- https://master.php.net/note/delete/110048 Reject -- https://master.php.net/note/reject/110048 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#190763) next »