如何让子进程向父进程返回值


How to have child processes return values to the parent

我正试图在多个进程之间运行for循环,并且需要每个for循环写入父进程中的数组。我尝试过使用数组退出子进程,但pcntl_wexitstatus()只能返回一个整数。所以我被卡住了。

我对多处理很陌生,但是,我看到有人说在父级和子级之间共享变量的一个好的解决方案是shmop,但我真的不知道如何使用它

这是我的代码:

$output = array();
for ($i = 0; $i < 4; $i++) {
    $pid = pcntl_fork();
    $start = ($i == 0) ? 1 : (1000000 * $i) + 1;
    $end = 1000000 * ($i + 1);
    if (!$pid) {
        for ($run = $start; $run <= $end; $run++) {
            $output[$i][] = 'Run ' . $run;
        }
        exit($i);
    }
}
while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);
}
echo implode("'n", $output);

为了澄清我所期望的情况,$output数组应该包含四个项,它们也是每个项都有一百万个项的数组。它应该是这样的:

Array
(
    [0] => Array
        (
            [0] => Run 1
            [1] => Run 2
            [2] => Run 3
            ...
        )
    [1] => Array
        (
            [0] => Run 1000001
            [1] => Run 1000002
            [2] => Run 1000003
            ...
        )
    [2] => Array
        (
            [0] => Run 2000001
            [1] => Run 2000002
            [2] => Run 2000003
            ...
        )
    [3] => Array
        (
            [0] => Run 3000001
            [1] => Run 3000002
            [2] => Run 3000003
            ...
        )
)

Php-fork(类似于NIX中的fork)这只是流程和环境的完整副本。父进程不知道子进程的更改。孩子们不能把结果传给家长。父进程只能检查子进程的末尾。如果您想要传递数据,可以使用共享内存。但请注意!php中的共享内存这不是真正的(操作系统)共享内存。但对于php来说,它是有效的。

您可以在此处找到解决方案:https://github.com/search?q=php+分叉