1--TEST-- 2swoole_server/task: kill task worker [SWOOLE_BASE] 3--SKIPIF-- 4<?php 5require __DIR__ . '/../../include/skipif.inc'; 6skip_if_darwin(); 7skip_if_in_valgrind(); 8?> 9--FILE-- 10<?php 11require __DIR__ . '/../../include/bootstrap.php'; 12use Swoole\Server; 13const PROC_NAME = 'swoole_unittest_server_task_worker'; 14$pm = new SwooleTest\ProcessManager; 15 16$pm->parentFunc = function ($pid) use ($pm) { 17 for ($i = 0; $i < 5; $i++) 18 { 19 //杀死进程 20 kill_process_by_name(PROC_NAME); 21 usleep(10000); 22 //判断进程是否存在 23 Assert::assert(get_process_pid_by_name(PROC_NAME) > 0); 24 } 25 $cli = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); 26 $cli->connect('127.0.0.1', $pm->getFreePort(), 10) or die("ERROR"); 27 $cli->send("task-01") or die("ERROR"); 28 Assert::same($cli->recv(), "task-01"); 29 $cli->close(); 30 $pm->kill(); 31}; 32 33$pm->childFunc = function () use ($pm) 34{ 35 $serv = new Server('127.0.0.1', $pm->getFreePort(), SWOOLE_BASE); 36 $serv->set(["worker_num" => 1, 'log_file' => TEST_LOG_FILE, 'task_worker_num' => 1,]); 37 $serv->on("WorkerStart", function (Server $serv, $worker_id) use ($pm) { 38 if ($worker_id = 1) { 39 swoole_set_process_name(PROC_NAME); 40 $pm->wakeup(); 41 } 42 }); 43 $serv->on("Receive", function (Server $serv, $fd, $reactorId, $data) 44 { 45 $serv->task(['fd' => $fd, 'data' => $data]); 46 }); 47 $serv->on('task', function (Server $serv, $task_id, $worker_id, $data) 48 { 49 $serv->send($data['fd'], $data['data']); 50 }); 51 $serv->on('finish', function (Server $serv, $fd, $rid, $data) 52 { 53 }); 54 $serv->start(); 55}; 56 57$pm->childFirst(); 58$pm->run(); 59 60?> 61--EXPECT-- 62