微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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_r($values);
?>

但是,它只打印一个值 – 由父级输出.有人可以解释一下这种行为并建议正确的代码吗?

问候,
J.P

解决方法:

分叉的孩子一旦写到任何地方就会获得他们自己的专用内存空间 – 这就是“写时复制”.虽然shmop确实提供了对公共内存位置的访问,但是在子代之间不共享实际的PHP变量和脚本中定义的内容.

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

本地域套接字最简单.让父母在fork之前为每个孩子用fsockopen打开一个.这样你就可以为每个孩子提供一个通讯渠道:http://php.net/manual/en/transports.unix.phphttp://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 举报,一经查实,本站将立刻删除。

相关推荐