2016-04-03 3 views
4

У меня есть консольная команда Symfony, что петли непрерывноОстановить команду Symfony Console

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    //... 

    pcntl_signal(SIGHUP, [$this, 'stopCommand']); 

    $this->shouldStop = false; 

    while (true) { 


     pcntl_signal_dispatch(); 

     if ($this->shouldStop) { 
      break; 
     } 
     sleep(60); 
    } 
} 

protected function stopCommand() 
{ 
    $this->shouldStop = true; 
} 

Я хотел бы остановить его от контроллера

public function stopAction() 
{ 
    posix_kill(posix_getpid(), SIGHUP); 

    return new Response('ok'); 
} 

, но я не знаю, почему он не работает

ответ

6

Это, вероятно, не работает, потому что консольная команда работает в другом процессе, чем действие контроллера. Попробуйте сохранить PID количество консольной команды в файл в начале выполнения с чем-то вроде:

file_put_contents("/tmp/console_command.pid", posix_getpid()); 

, а затем использовать этот код в контроллере:

posix_kill(file_get_contents("/tmp/console_command.pid"), SIGHUP);