我想实现以下目标:
初始化一个数组.子进程将一些元素添加到数组中.父进程向数组添加一些元素.最后在退出之前,打印所有元素.
以下是我写的代码:
<?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);
?>
但是,它只打印一个值 – 由父级输出.有人可以解释一下这种行为并建议正确的代码吗?
问候,
J.P
解决方法:
分叉的孩子一旦写到任何地方就会获得他们自己的专用内存空间 – 这就是“写时复制”.虽然shmop确实提供了对公共内存位置的访问,但是在子代之间不共享实际的PHP变量和脚本中定义的内容.
做$x = 7;在一个孩子中,不会让其他孩子的$x也变成7.每个孩子都有自己的专用$x,完全独立于其他人的副本.
本地域套接字最简单.让父母在fork之前为每个孩子用fsockopen打开一个.这样你就可以为每个孩子提供一个通讯渠道:http://php.net/manual/en/transports.unix.php和http://php.net/manual/en/transports.unix.php.
您还可以共享内存,或在两个进程之间打开双向通信通道,并构建一个小的api来来回发送数据.
只要父子知道共享内存段的键/键可以在pcnlt_fork之前执行shmop_open.但请记住,pcnlt_fork在子进程中返回0,而在创建子进程失败时返回-1(检查注释/混淆/附近的代码).父亲将在$pid中创建刚刚创建的子进程的PID.
在这里查看:
http://php.net/manual/es/function.pcntl-fork.php
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。