0

环境php7.2.14 + swoole4.4
代码如下:

composer require symfony/var-dumper

仿照swoole文档编写:https://wiki.swoole.com/wiki/...

<?php
require_once __DIR__ . "/vendor/autoload.php";

use Swoole\Process;
use Swoole\Timer;

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('test');

function callback_function () {
    echo posix_getpid()."\n";
    // 异步
    Timer::after(3000, function () {
        echo posix_getpid()." hello world\n";
    });

    // 同步
    // sleep(3);
    // echo posix_getpid()." hello world\n";
    global $redis;
};

Timer::tick(1000, function () {
    echo posix_getpid()." parent timer\n";
});

Process::signal(SIGCHLD, function ($sig) {
    // dump(posix_getpid());
    while ($ret = Process::wait(false)) {
        dump($ret);
        $p = new Process('callback_function');
        $p->start();
    }
});

$p = new Process('callback_function');

$p->start();

异步Timer::after()输出结果:

clipboard.png
子进程疯狂退出,为什么没有等到3秒后在退出??

同步sleep()输出结果符合预期。

clipboard.png

2019-07-25 提问
1 个回答
0

https://segmentfault.com/a/11...

function callback_function () {

echo posix_getpid()."\n";
// 异步
Timer::after(3000, function () {
    echo posix_getpid()." hello world\n";
});

// 同步
// sleep(3);
// echo posix_getpid()." hello world\n";
global $redis;

Event::wait();
};

改写后就可以了!不过为什么之前子进程第一次运行时是正常的?

撰写答案

推广链接