Поведение Ctrl+C и его обработка

young

Новичок
Поведение Ctrl+C и его обработка

PS: все скрипты проверялись под FreeBSD PHP-cli v. 4.3.1
и касаются консольных скриптов

1. Возникло несколько вопросов по поведению Ctrl+C

Скрипт следующего характера

<?php sleep(100); ?>
при нажатии Ctrl+C завершает свою работу


Скрипт следующего характера

<?php
while (1) sleep(100);
?>

при нажатии Ctrl+C просто переходит на новую итерацию.

Почему так происходит?

2. Как корректно обработать нажатие Ctrl+C
Как я пониманию, в таком случае скрипту посылается сигнал SIGINT, который можно корректно обрабатывать при помощи pcntl_signal

но код
PHP:
<?php
function sigint() {
   echo "Have a signal";
   exit;
}
pcntl_signal(SIGINT, 'sigint');
sleep(100);
?>
не работает, так как предполагалось бы

Где грабли?

-~{}~ 11.05.04 11:05:

Спасибо всем принявшим участие.

Проблема решалась добавлением declare(ticks=1);

Только теперь объясните мне, что это означает?
 

Profic

just Profic (PHP5 BetaTeam)
[m]ref.pcntl[/m]
PCNTL now uses ticks as the signal handle callback mechanism, which is much faster than the previous mechanism. This change follows the same semantics as using "user ticks". You use the declare() statement to specify the locations in your program where callbacks are allowed to occur. This allows you to minimize the overhead of handling asynchronous events. In the past, compiling PHP with pcntl enabled would always incur this overhead, whether or not your script actually used pcntl.
и еще [m]declare[/m]
вроде все понятно должно быть
если не понятно - то вопросы приветствуются :)
 

tristram

Guest
c Ctrl+c вообще глюки.. у меня одно время вылетал консоль (php 4.3.3) при нажатии ctrl+c
 
Сверху