123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- <?php
- $workers = [];
- $worker_num = 10;
- //swoole_process::daemon(0, 1);
- function onReceive($pipe) {
- global $workers;
- $worker = $workers[$pipe];
- $data = $worker->read();
- echo "RECV: " . $data;
- }
- //循环创建进程
- for($i = 0; $i < $worker_num; $i++)
- {
- $process = new swoole_process(function(swoole_process $process)
- {
- swoole_process::signal(SIGTERM, function($signal_num) use ($process) {
- echo "signal call = $signal_num, #{$process->pid}\n";
- });
- $i = 1;
- while($i++)
- {
- $process->write("Worker#{$process->id}: hello master\n");
- if ($i > 5 and $process->id == 1) $process->exit();
- sleep(1);
- }
- });
- $process->id = $i;
- $pid = $process->start();
- $workers[$process->pipe] = $process;
- }
- swoole_process::signal(SIGCHLD, function(){
- //表示子进程已关闭,回收它
- $status = swoole_process::wait();
- echo "Worker#{$status['pid']} exit\n";
- });
- swoole_process::signal(SIGTERM, function($signal_num) {
- echo "signal call = $signal_num \n";
- });
- //将子进程的管道加入EventLoop
- foreach($workers as $process)
- {
- swoole_event_add($process->pipe, 'onReceive');
- }
|