PHP fork进程-在父进程中获取子输出

PHP fork进程-在父进程中获取子输出,php,fork,Php,Fork,我希望实现以下目标: 初始化数组。子进程向数组中添加一些元素。父进程向数组中添加一些元素。最后,在退出之前,打印所有元素 以下是我编写的代码: <?php $values=array(); $pid = pcntl_fork(); if (!$pid) { sleep(2); $values[]="Put by child"; exit(0); } $values[]="Put by parent"; pcntl_waitpid($pid, $status); print

我希望实现以下目标:

初始化数组。子进程向数组中添加一些元素。父进程向数组中添加一些元素。最后,在退出之前,打印所有元素

以下是我编写的代码:

<?php
$values=array();
$pid = pcntl_fork();
if (!$pid) {
   sleep(2);
   $values[]="Put by child";
   exit(0);
}
$values[]="Put by parent";
pcntl_waitpid($pid, $status);
print_r($values);
?>

但是,它只打印一个值-
由父级输入。有人能解释一下这种行为并建议正确的代码吗

问候,,
JP

分叉的孩子在任何地方写东西时都会获得自己的专用内存空间副本,这就是“写时拷贝”。虽然shmop确实提供了对公共内存位置的访问,但脚本中定义的实际PHP变量和其他内容不会在子级之间共享

做$x=7;在一个孩子将不会使$x在其他孩子也成为7。每个孩子都有自己的专用$x,完全独立于其他人的副本

本地域套接字是最简单的。让父级在fork之前为每个子级打开一个fsockopen。这样,每个孩子可以有一个通信通道:和

您还可以共享内存,或者打开两个进程之间的双向通信通道,并构建一个小api来来回发送数据

只要父亲和孩子知道共享内存段的键,就可以在pcnlt_分叉之前打开shmop_。但是请记住,pcnlt_fork在子进程中返回0,在创建子进程失败时返回-1(检查注释/混淆/附近的代码)。父进程将在$pid中包含刚刚创建的子进程的pid

请在此处查看:


孩子的代码缺少
print\r()
语句

父进程不会打印子进程添加到
值中的内容,因为添加是在关闭子进程
fork()
之后完成的,并且通过此操作,它获得了自己的prcoess内存副本

(我强调):

fork()
函数是Unix/Linux/POSIX通过复制调用进程来创建新进程的方法

这种分叉行为与所有线程共享相同地址空间的线程不同。

(很抱歉交叉发布)

我建议看一下套接字\u create\u pair()

在PHP手册中,有一个关于fork()父进程和子进程之间的进程间通信(IPC)的非常简单的例子


使用serialize()undunserialize()甚至可以传输复杂的数据类型,如数组…

资源,如数据库连接,也可以在子级之间共享