PHP 多进程操作 循环pcntl_fork操作

作为工作的备忘录  只写重点了

下面的东西如果有问题或者你们发现逻辑上的BUG 赶紧联系我 毕竟是正式的东西 有问题需要及时发现处理呀 。。。  1042579697

工作原因,老大说不想每次有定时任务就在Linux上写个crontab,比较麻烦,他说起一个crontab,然后每隔五分钟跑一次,然后拿到需要执行的定时任务,开启子进程,让他自己去跑吧

好吧,那我就开始写

========文字逻辑哟==========

拿到一批需要跑的定时任务(假设3个),修改状态,防止这次没跑完,下次又开始了

重点红红的】开始循环fork,上代码咯

declare(ticks = 1); #写在第一行的 反正我是这样的

xxoo = getmypid();
echo "我是正宗的父ID:" . getmypid()."\r\n"; 

for ($x = 0; $x < count($taskarr); $x++) { 

pcntl_signal(SIGCHLD, 'sig_func');#一个信号接收,用于回收进程的

         $pid = pcntl_fork();
    if(-1 == $pid) {
      die('Fork failed');
    } else if ($pid > 0) {
//       echo $x."第子进程的ID".$pid."\r\n"; 
//       echo "正宗的父ID是:".$xxoo."\r\n"; 
//       echo $pid."的父进程ID".getmypid()."\r\n"; 
      if ($xxoo != getmypid()) {
//         echo getmypid()."是个假的父ID\r\n";
        posix_kill($pid, 9);
      }

      pcntl_waitpid($pid, $status); #等待进程结束,如果是僵尸进程直接回收 大概吧 我强行翻译成这样的

    } else {
      #子进程需要执行的逻辑代码

      echo $x."----".getmypid()."\r\n";
    }

}

function sig_func() {
  pcntl_wait($status);
}


没有了 大概看到这也就知道怎么弄了  贴下我测试的时候  那个 pid>0里面的输出,也是循环3次,规律自己找吧

我是正宗的父ID:26012
0第子进程的ID26014
正宗的父ID是:26012
26014的父进程ID26012
0----26014
1第子进程的ID26015
正宗的父ID是:26012
26015的父进程ID26014
26014是个假的父ID
1----26015
2第子进程的ID26016
正宗的父ID是:26012
26016的父进程ID26015
26015是个假的父ID
2----26016
Done! :^)<br>
====================
Done! :^)<br>
====================
2第子进程的ID26017
正宗的父ID是:26012
26017的父进程ID26014
26014是个假的父ID
2----26017
Done! :^)<br>
====================
Done! :^)<br>
====================
1第子进程的ID26019
正宗的父ID是:26012
26019的父进程ID26012
1----26019
2第子进程的ID26020
正宗的父ID是:26012
26020的父进程ID26019
26019是个假的父ID
2----26020
Done! :^)<br>
====================
Done! :^)<br>
====================
2第子进程的ID26021
正宗的父ID是:26012
26021的父进程ID26012
2----26021
Done! :^)<br>
====================
Done! :^)<br>
====================

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值