PHP daemon job 进程的初步构想和超时处理


// 开始运行进程
$process->start();

// 进程回调
$process->on('start',function(){
  $timeout = 10;

  pcntl_async_signals(true);

  while (true) {
    pcntl_signal(SIGALRM, function () {
      posix_kill(getmypid(), SIGKILL);
    });

    pcntl_alarm($timeout);

    // handle your job
  }
});

其中超时的实现是使用 pcntl_async_signals 结合 pcntl_alarmpcntl_alarm多次设置,后面的会覆盖前面的设置,所以不用担心在 while 循环中重复实现。

参考源码: vendor/laravel/framework/src/Illuminate/Queue/Worker.php
文章:https://segmentfault.com/a/1190000010224426

猜你喜欢

转载自blog.csdn.net/ROVAST/article/details/80569799