22declare(strict_types=1);
26use
function function_exists;
27use
function pcntl_async_signals;
28use
function pcntl_signal;
29use
function sapi_windows_set_ctrl_handler;
30use
const PHP_WINDOWS_EVENT_CTRL_BREAK;
31use
const PHP_WINDOWS_EVENT_CTRL_C;
39 private ?\Closure $interruptCallback;
45 $this->interruptCallback = $interruptCallback;
47 if(function_exists(
'sapi_windows_set_ctrl_handler')){
48 sapi_windows_set_ctrl_handler($this->interruptCallback =
function(
int $signo) use ($interruptCallback) :
void{
49 if($signo === PHP_WINDOWS_EVENT_CTRL_C || $signo === PHP_WINDOWS_EVENT_CTRL_BREAK){
53 }elseif(function_exists(
'pcntl_signal')){
59 pcntl_signal($signal, $this->interruptCallback = fn(
int $signo) => $interruptCallback());
61 pcntl_async_signals(
true);
67 public function unregister() : void{
68 if(function_exists(
'sapi_windows_set_ctrl_handler')){
69 sapi_windows_set_ctrl_handler($this->interruptCallback,
false);
70 }elseif(function_exists(
'pcntl_signal')){
76 pcntl_signal($signal, SIG_DFL);
__construct(\Closure $interruptCallback)