当前位置: 首页>>代码示例>>PHP>>正文


PHP swoole_process::wait方法代码示例

本文整理汇总了PHP中swoole_process::wait方法的典型用法代码示例。如果您正苦于以下问题:PHP swoole_process::wait方法的具体用法?PHP swoole_process::wait怎么用?PHP swoole_process::wait使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在swoole_process的用法示例。


在下文中一共展示了swoole_process::wait方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: master_process

function master_process($workers)
{
    //监听子进程,如果停止,会再拉起来
    swoole_process::signal(SIGCHLD, function ($signo) use(&$workers) {
        while (1) {
            $ret = swoole_process::wait(false);
            if ($ret) {
                $pid = $ret['pid'];
                //这里实现一个自动拉起的能力
                $child_process = $workers[$pid];
                logprint('info', "Worker Exit, kill_signal={$ret['signal']} PID=" . $pid);
                $new_pid = $child_process->start();
                $workers[$new_pid] = $child_process;
                unset($workers[$pid]);
            } else {
                break;
            }
        }
    });
    //kill -10 结束全部程序
    swoole_process::signal(SIGUSR1, function ($signo) use(&$workers) {
        swoole_process::signal(SIGCHLD, null);
        foreach ($workers as $pid => $worker) {
            swoole_process::kill($pid);
        }
        //处理子进程,然后自己退出
        exit;
    });
}
开发者ID:peterxiemin,项目名称:commonswoole,代码行数:29,代码来源:timer.php

示例2: registerSignal

 /**
  * 注册信号
  */
 public static function registerSignal()
 {
     //终止进程
     \swoole_process::signal(SIGTERM, function ($signo) {
         self::exit2p('master process [' . self::$process_name . '] exit');
     });
     //忽略信号,当子进程停止或退出时通知父进程
     \swoole_process::signal(SIGCHLD, function ($signo) {
         //非阻塞等待
         while ($ret = \swoole_process::wait(false)) {
             $pid = $ret['pid'];
             if (isset(self::$worker_list[$pid])) {
                 $worker = self::$worker_list[$pid];
                 $worker['process']->close();
                 //重启该子进程
                 self::createWorkerProcess($worker['className'], $worker['number'], $worker['options']);
                 defined('PHPKIT_RUN_DEBUG') && syslog(LOG_INFO, 'child process restart:' . $pid);
             }
         }
     });
     //终止进程,用户定义信号1
     \swoole_process::signal(SIGUSR1, function ($signo) {
         //TODO something
     });
     defined('PHPKIT_RUN_DEBUG') && syslog(LOG_INFO, 'register signal success');
 }
开发者ID:mawenpei,项目名称:swoole-crontab,代码行数:29,代码来源:Handler.php

示例3: run

 function run($options)
 {
     $asDaemon = isset($options['asDaemon']) ? $options['asDaemon'] : 0;
     if ($asDaemon) {
         \swoole_process::daemon();
     }
     $pids = [];
     $workers = [];
     for ($i = 0; $i < $this->worker_num; $i++) {
         $process = new \swoole_process($this->workerStart, $this->redirect_stdout);
         $process->id = $i;
         $pid = $process->start();
         $pids[] = $pid;
         $workers[$pid] = $process;
     }
     $pidFile = isset($options['pidFile']) ? $options['pidFile'] : 0;
     if ($pidFile) {
         $ppid = posix_getpid();
         $pids[] = $ppid;
         file_put_contents($pidFile, implode("|", $pids));
     }
     \swoole_process::signal(SIGTERM, function () use($workers) {
         exit(0);
     });
     \swoole_process::signal(SIGINT, function () {
         exit(0);
     });
     \swoole_process::wait(false);
     return $workers;
 }
开发者ID:kerisy,项目名称:framework,代码行数:30,代码来源:Process.php

示例4: master_async

function master_async($workers)
{
    swoole_process::signal(SIGCHLD, function ($signo) use(&$workers) {
        while (1) {
            $ret = swoole_process::wait(false);
            if ($ret) {
                $pid = $ret['pid'];
                $child_process = $workers[$pid];
                //unset($workers[$pid]);
                echo "Worker Exit, kill_signal={$ret['signal']} PID=" . $pid . PHP_EOL;
                $new_pid = $child_process->start();
                $workers[$new_pid] = $child_process;
                unset($workers[$pid]);
            } else {
                break;
            }
        }
    });
    /**
     * @var $process swoole_process
     */
    foreach ($workers as $pid => $process) {
        swoole_event_add($process->pipe, function ($pipe) use($process) {
            $recv = $process->read();
            if ($recv) {
                echo "From Worker: " . $recv;
            }
            $process->write("HELLO worker {$process->pid}\n");
        });
        $process->write("hello worker[{$pid}]\n");
    }
}
开发者ID:zzjin,项目名称:swoole-src,代码行数:32,代码来源:worker.php

示例5: master_async

function master_async($workers)
{
    swoole_process::signal(SIGCHLD, function ($signo) use($workers) {
        while (1) {
            $ret = swoole_process::wait(false);
            if ($ret) {
                $pid = $ret['pid'];
                unset($workers[$pid]);
                echo "Worker Exit, PID=" . $pid . PHP_EOL;
            } else {
                break;
            }
        }
    });
    /**
     * @var $process swoole_process
     */
    foreach ($workers as $pid => $process) {
        swoole_event_add($process->pipe, function ($pipe) use($process) {
            $recv = $process->read();
            if ($recv) {
                echo "From Worker: " . $recv;
            }
        });
        $process->write("hello worker[{$pid}]\n");
    }
}
开发者ID:sophia2152,项目名称:swoole-src,代码行数:27,代码来源:worker.php

示例6: run

 static function run()
 {
     $table = new swoole_table(1024 * 256);
     $table->column('index', swoole_table::TYPE_INT);
     $table->column('serid', swoole_table::TYPE_INT);
     $table->column('data', swoole_table::TYPE_STRING, 64);
     $table->create();
     self::$table = $table;
     for ($i = 0; $i < self::$key_num; $i++) {
         $key = 'user_' . (self::$key_base + $i);
         $ret = self::$table->set($key, array('index' => $i, 'serid' => rand(1000, 9999), 'data' => "hello_world_{$i}"));
         if (!$ret) {
             echo "count {$i} failed.";
             break;
         }
     }
     for ($i = 0; $i < self::$worker_num; $i++) {
         $process = new swoole_process('UnitTest_Table::worker');
         $process->start();
         $workers[$i] = $process;
     }
     for ($i = 0; $i < self::$worker_num; $i++) {
         $exit = swoole_process::wait();
         echo "worker[{$i}] exit\n";
     }
 }
开发者ID:cjq,项目名称:tests,代码行数:26,代码来源:table.php

示例7: onWorkerStart

 public function onWorkerStart(swoole_server $server, $worker_id)
 {
     swoole_process::signal(SIGCHLD, function ($sig) {
         //必须为false,非阻塞模式
         while ($ret = swoole_process::wait(false)) {
             echo "PID={$ret['pid']}\n";
         }
     });
 }
开发者ID:jinchunguang,项目名称:swoole-doc,代码行数:9,代码来源:shell_server.php

示例8: master_run

 private function master_run()
 {
     $event = event_new();
     event_set($event, $this->socket_fd, EV_READ | EV_PERSIST, array($this, 'dispatch'));
     event_base_set($event, $this->event_base);
     event_add($event);
     event_base_loop($this->event_base);
     swoole_process::wait();
 }
开发者ID:zhangjingpu,项目名称:yaf-lib,代码行数:9,代码来源:Processpool.php

示例9: master_async

 function master_async()
 {
     $count = 0;
     swoole_process::signal(SIGCHLD, function ($signo) use(&$count) {
         while (1) {
             $ret = swoole_process::wait(false);
             if ($ret) {
                 $pid = $ret['pid'];
                 $count++;
                 //echo "Worker Exit, kill_signal={$ret['signal']} PID=" . $pid . PHP_EOL;
                 //echo "Count=" . $count . " Worker_num=" . $this->worker_num . " Stauts=" . $this->status . PHP_EOL;
                 if ($count == $this->worker_num) {
                     switch ($this->status) {
                         case '3-dim':
                             $this->report_cost();
                             exit(0);
                             break;
                         case 'import':
                             $this->report_cost();
                             $this->status = '1-dim';
                             $this->restart_process();
                             break;
                         case '1-dim':
                             $this->report_cost();
                             $this->status = '2-dim';
                             $this->restart_process();
                             break;
                         case '2-dim':
                             $this->report_cost();
                             $this->status = '3-dim';
                             $this->restart_process();
                             break;
                         default:
                             break;
                     }
                     $count = 0;
                 }
             } else {
                 break;
             }
         }
     });
     /**
      * @var $process swoole_process
      */
     foreach ($this->workers as $pid => $process) {
         swoole_event_add($process->pipe, function ($pipe) use($process) {
             $recv = $process->read();
             if ($recv) {
                 echo "From Worker: " . $recv;
             }
             $process->write("HELLO worker {$process->pid}\n");
         });
         $process->write("hello worker[{$pid}]\n");
     }
 }
开发者ID:shenxinyu,项目名称:redis_rank,代码行数:56,代码来源:paralle_rank.php

示例10: callback_timer_function

function callback_timer_function()
{
    $Handle = new TimingCall_Tasks();
    $Handle->upDaemonTime();
    $tasks = $Handle->readExecuteTasks();
    foreach ($tasks as $task) {
        $process = new swoole_process('callback_process_function', true);
        $process->write(json_encode($task));
        $process->start();
        $process->wait(false);
    }
}
开发者ID:imdaqian,项目名称:Hi-Timed,代码行数:12,代码来源:cmd.php

示例11: onReceive

function onReceive($pipe)
{
    global $workers;
    $worker = $workers[$pipe];
    $data = $worker->read();
    if ($data == false) {
        //表示子进程已关闭,回收它
        $status = swoole_process::wait();
        echo "Worker#{$status['pid']} exit\n";
    } else {
        echo "RECV: " . $data;
    }
}
开发者ID:sophia2152,项目名称:swoole-src,代码行数:13,代码来源:async_master.php

示例12: start

 /**
  * @brief 启动子进程
  */
 public function start()
 {
     $workerNum = $this->_objAha->getConfig()->get('aha', 'worker_num');
     for ($i = 0; $i < $workerNum; $i++) {
         $worker = new \Daemon\Asyncworker($this->_objAha);
         $process = new \swoole_process(array($worker, 'start'));
         //$process->daemon();
         $workerPid = $process->start();
         $this->_workers[$workerPid] = $process;
         $process->write("worker started!");
     }
     foreach ($this->_workers as $process) {
         $workerPid = \swoole_process::wait();
         echo "[Worker Shutdown][WorkerId] {$workerPid} " . PHP_EOL;
         unset($this->_workers[$workerPid]);
     }
 }
开发者ID:vucms,项目名称:aha,代码行数:20,代码来源:Async.php

示例13: _waitChildProcess

 protected function _waitChildProcess()
 {
     //必须为false,非阻塞模式
     //信号发生时可能同时有多个子进程退出
     //必须循环执行wait直到返回false
     $objManager = \Daemon\Library\Ipc\Manager::getInstance();
     while ($result = \swoole_process::wait(false)) {
         $pid = $result['pid'];
         if ($objManager->hasDriveWorker($pid)) {
             $objManager->delDriveWorker($pid);
             \Daemon\Library\Ipc\Shared::delCurrentTaskTable($pid);
             if (!$this->_sigterm) {
                 $objManager->createDriveWorker(\Daemon\Process\Master::getInstance()->getAha(), 1);
             }
         } elseif ($objManager->hasTaskWorker($pid)) {
             $objManager->delTaskWorker($pid);
             \Daemon\Library\Ipc\Shared::delCurrentTaskTable($pid);
             if (!$this->_sigterm) {
                 $objManager->createDirtributeWorker(\Daemon\Process\Master::getInstance()->getAha(), 1);
             }
         } elseif ($objManager->hasRedoWorker($pid)) {
             $objManager->delRedoWorker($pid);
             \Daemon\Library\Ipc\Shared::delCurrentTaskTable($pid);
             if (!$this->_sigterm) {
                 $objManager->createRedoWorker(\Daemon\Process\Master::getInstance()->getAha(), 1);
             }
         } elseif ($objManager->hasStatsWorker($pid)) {
             $objManager->delStatsWorker($pid);
             \Daemon\Library\Ipc\Shared::delCurrentTaskTable($pid);
             if (!$this->_sigterm) {
                 $objManager->createStatsWorker(\Daemon\Process\Master::getInstance()->getAha(), 1);
             }
         } else {
         }
     }
     //如果是SIGTERM信号 并且子进程都已经退出了 父进程终止
     $workers = \Daemon\Library\Ipc\Shared::getCurrentTaskTable();
     if ($this->_sigterm && !$workers->count()) {
         \swoole_event_exit();
     }
 }
开发者ID:eyehere,项目名称:aha,代码行数:41,代码来源:Signal.php

示例14: var_dump

            static $index = 0;
            $index = $index + 1;
            $this->process->push($index . "Hello");
            var_dump($index);
            if ($index == 10) {
                $this->process->push("exit");
                $this->process->push("exit");
                $this->process->push("exit");
                swoole_timer_clear($timer_id);
            }
        });
    }
    public function task_run($worker)
    {
        while (true) {
            $data = $worker->pop();
            var_dump($data);
            if ($data == 'exit') {
                $worker->exit();
            }
            sleep(5);
        }
    }
}
new BaseProcess();
swoole_process::signal(SIGCHLD, function ($sig) {
    //必须为false,非阻塞模式
    while ($ret = swoole_process::wait(false)) {
        echo "PID={$ret['pid']}\n";
    }
});
开发者ID:jinchunguang,项目名称:swoole-doc,代码行数:31,代码来源:muti_process.php

示例15: StartServ

function StartServ($phpStart, $cmd, $name)
{
    $process = new swoole_process(function (swoole_process $worker) use($name, $cmd, $phpStart) {
        //目前指支持一个
        $worker->exec($phpStart, array(STARTBASEPATH . "/lib/Swoole/shell/start.php", $cmd, $name));
        //拉起server
        StartLogTimer(__LINE__ . '   ' . $phpStart . ' ' . STARTBASEPATH . '/lib/Swoole/shell/start.php ' . $cmd . ' ' . $name);
    }, false);
    $pid = $process->start();
    $exeRet = swoole_process::wait();
    if ($exeRet['code']) {
        //创建失败
        StartLog(" startall  [31;40m [FAIL] [0m" . PHP_EOL);
        return false;
    } else {
        StartLog(" startall  [31;40m [SUCCESS] [0m" . PHP_EOL);
        return true;
    }
}
开发者ID:delphinBlue,项目名称:tsf,代码行数:19,代码来源:swoole.php


注:本文中的swoole_process::wait方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。