/**
  * Singleton class loader
  * @return ezpContentPublishingQueueProcessor
  */
 public static function instance()
 {
     if (!self::$instance instanceof ezpContentPublishingQueueProcessor) {
         self::$instance = new ezpContentPublishingQueueProcessor();
         // signal handler for children termination signal
         self::$instance->registerSignalHandler();
     }
     return self::$instance;
 }
    // stop output completely
    fclose(STDIN);
    fclose(STDOUT);
    fclose(STDERR);
    // terminate the parent
    posix_kill($parentProcessID, SIGUSR1);
} else {
    $cli->output("Running in interactive mode. Hit ctrl-c to interrupt.");
}
if ($options['daemon']) {
    $output = new ezpAsynchronousPublisherLogOutput();
} else {
    $output = new ezpAsynchronousPublisherCliOutput();
}
// actual daemon code
$processor = ezpContentPublishingQueueProcessor::instance();
$processor->setOutput($output);
$processor->setSignalHandler($daemonSignalHandler);
$processor->run();
eZScript::instance()->shutdown(0);
/**
 * Signal handler
 * @param int $signo Signal number
 */
function childHandler($signo)
{
    switch ($signo) {
        case SIGALRM:
            eZScript::instance()->shutdown(1);
            break;
        case SIGUSR1:
/**
 * Signal handler for the daemon process
 * @param int $signo Signal number
 */
function daemonSignalHandler($signo)
{
    switch ($signo) {
        case SIGTERM:
        case SIGINT:
            flock($GLOBALS['pidFp'], LOCK_UN);
            fclose($GLOBALS['pidFp']);
            ezpContentPublishingQueueProcessor::terminate();
            @unlink($GLOBALS['pidFile']);
            eZScript::instance()->shutdown(0);
            break;
    }
}