2016-04-03 190 views
4

我有一個不斷循環停止Symfony的控制檯命令

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'); 
} 

阻止他,但我不知道爲什麼它不工作Symfony的控制檯命令

回答

6

它可能不起作用,因爲控制檯命令運行在與控制器操作不同的進程中。嘗試在開始執行存儲控制檯命令的PID號到文件的東西,如:

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

,然後在控制器使用此代碼:

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