Well I misspoke before. It is not enough to process signals outside of the signal handler. They must be processed outside of the tick handler (explicit or implied). So...
Register a tick handler that calls pcntl_signal_dispatch();
In the signal handler, enqueue your signal;
In the main loop of your script, process your signals;
global$sig_queue;
global$use_queue;$sig_queue= array();$use_queue=true;// set to false to do it the old wayfunctiontick_handler()
{pcntl_signal_dispatch();
}
functionsig_handler($sig)
{
global$sig_queue;
global$use_queue;
if(isset($use_queue) &&$use_queue)
{$sig_queue[] =$sig;
}
else
{sig_helper($sig);
}
}
functionsig_helper($sig)
{
switch($sig)
{
caseSIGHUP:$pid=pcntl_fork();
if($pid) print("forked$pidn");
break;
default:
print("unhandled sig:$sign");
}
}pcntl_signal(SIGHUP,"sig_handler");
while(true)
{
if($use_queue) foreach($sig_queueas$idx=>$sig)
{sig_helper($sig);
unset($sig_queue[$idx]);
}sleep(1);
}?>