interruptCallback = $interruptCallback; if(function_exists('sapi_windows_set_ctrl_handler')){ sapi_windows_set_ctrl_handler($this->interruptCallback = function(int $signo) use ($interruptCallback) : void{ if($signo === PHP_WINDOWS_EVENT_CTRL_C || $signo === PHP_WINDOWS_EVENT_CTRL_BREAK){ $interruptCallback(); } }); }elseif(function_exists('pcntl_signal')){ foreach([ SIGTERM, SIGINT, SIGHUP ] as $signal){ pcntl_signal($signal, $this->interruptCallback = fn(int $signo) => $interruptCallback()); } pcntl_async_signals(true); }else{ //no supported signal handlers :( } } public function unregister() : void{ if(function_exists('sapi_windows_set_ctrl_handler')){ sapi_windows_set_ctrl_handler($this->interruptCallback, false); }elseif(function_exists('pcntl_signal')){ foreach([ SIGTERM, SIGINT, SIGHUP ] as $signal){ pcntl_signal($signal, SIG_DFL); } } } }