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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值