当我在Perl中分叉进程时,子进程可以查看其父进程的数据

use*_*668 2 perl fork

假设我正在构建一个webcrawler并且我有一个包含所有访问过的URL的哈希.

当我分叉子进程时,我希望能够从子进程访问被访问URL的哈希值,但是我不想复制哈希,因为它很大并且会耗尽计算机的内存.

当我使用Parallel :: ForkManager进行fork时,我打印了父进程中声明的哈希的地址,当我从父进程和子进程打印时,我得到相同的地址,例如HASH(0x7fc59d017f38)

但我想确保数据结构没有被复制到子进程

ike*_*ami 8

不.每个进程都有自己的地址空间.孩子的地址空间以其父母的副本开头,但是改变其中一个对另一个没有影响.您需要使用各种可能的通信通道(管道,memcached,数据库,文件等)之一显式交换您想要"共享"的数据.

  • 是的,两个不同地址空间中的相同地址.有点像两个人在两个不同的城市拥有相同的街道地址.这并不意味着他们共用一间浴室.内存地址不是指存储器芯片上的位置,而是指进程地址空间中的位置. (4认同)