diff -Nuar a/vendor/magento/framework/App/Cache/Frontend/Factory.php b/vendor/magento/framework/App/Cache/Frontend/Factory.php
--- a/vendor/magento/framework/App/Cache/Frontend/Factory.php
+++ b/vendor/magento/framework/App/Cache/Frontend/Factory.php
@@ -148,15 +148,17 @@ class Factory
         $result = $this->_objectManager->create(
             \Magento\Framework\Cache\Frontend\Adapter\Zend::class,
             [
-                'frontend' => \Zend_Cache::factory(
-                    $frontend['type'],
-                    $backend['type'],
-                    $frontend,
-                    $backend['options'],
-                    true,
-                    true,
-                    true
-                )
+                'frontendFactory' => function () use ($frontend, $backend) {
+                    return \Zend_Cache::factory(
+                        $frontend['type'],
+                        $backend['type'],
+                        $frontend,
+                        $backend['options'],
+                        true,
+                        true,
+                        true
+                    );
+                }
             ]
         );
         $result = $this->_applyDecorators($result);
diff -Nuar a/vendor/magento/framework/Cache/Frontend/Adapter/Zend.php b/vendor/magento/framework/Cache/Frontend/Adapter/Zend.php
--- a/vendor/magento/framework/Cache/Frontend/Adapter/Zend.php
+++ b/vendor/magento/framework/Cache/Frontend/Adapter/Zend.php
@@ -16,11 +16,32 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
     protected $_frontend;
 
     /**
-     * @param \Zend_Cache_Core $frontend
+     * Factory that creates the \Zend_Cache_Cores
+     *
+     * @var \Closure
+     */
+    private $_frontendFactory;
+
+    /**
+     * The pid that owns the $_frontend object
+     *
+     * @var int
+     */
+    private $_pid;
+
+    /**
+     * @var \Zend_Cache_Core[]
+     */
+    static private $_parentFrontends = [];
+
+    /**
+     * @param \Closure $frontendFactory
      */
-    public function __construct(\Zend_Cache_Core $frontend)
+    public function __construct(\Closure $frontendFactory)
     {
-        $this->_frontend = $frontend;
+        $this->_frontendFactory = $frontendFactory;
+        $this->_frontend = $frontendFactory();
+        $this->_pid = getmypid();
     }
 
     /**
@@ -28,7 +49,7 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
      */
     public function test($identifier)
     {
-        return $this->_frontend->test($this->_unifyId($identifier));
+        return $this->_getFrontEnd()->test($this->_unifyId($identifier));
     }
 
     /**
@@ -36,7 +57,7 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
      */
     public function load($identifier)
     {
-        return $this->_frontend->load($this->_unifyId($identifier));
+        return $this->_getFrontEnd()->load($this->_unifyId($identifier));
     }
 
     /**
@@ -44,7 +65,7 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
      */
     public function save($data, $identifier, array $tags = [], $lifeTime = null)
     {
-        return $this->_frontend->save($data, $this->_unifyId($identifier), $this->_unifyIds($tags), $lifeTime);
+        return $this->_getFrontEnd()->save($data, $this->_unifyId($identifier), $this->_unifyIds($tags), $lifeTime);
     }
 
     /**
@@ -52,7 +73,7 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
      */
     public function remove($identifier)
     {
-        return $this->_frontend->remove($this->_unifyId($identifier));
+        return $this->_getFrontEnd()->remove($this->_unifyId($identifier));
     }
 
     /**
@@ -76,7 +97,7 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
                 "Magento cache frontend does not support the cleaning mode '{$mode}'."
             );
         }
-        return $this->_frontend->clean($mode, $this->_unifyIds($tags));
+        return $this->_getFrontEnd()->clean($mode, $this->_unifyIds($tags));
     }
 
     /**
@@ -84,7 +105,7 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
      */
     public function getBackend()
     {
-        return $this->_frontend->getBackend();
+        return $this->_getFrontEnd()->getBackend();
     }
 
     /**
@@ -92,7 +113,7 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
      */
     public function getLowLevelFrontend()
     {
-        return $this->_frontend;
+        return $this->_getFrontEnd();
     }
 
     /**
@@ -119,4 +140,34 @@ class Zend implements \Magento\Framework\Cache\FrontendInterface
         }
         return $ids;
     }
+
+    /**
+     * getter for _frontend so that we can support fork()s
+     *
+     * @return \Zend_Cache_Core
+     */
+    private function _getFrontEnd()
+    {
+        if (getmypid() === $this->_pid) {
+            return $this->_frontend;
+        }
+        static::$_parentFrontends[] = $this->_frontend;
+        $frontendFactory = $this->_frontendFactory;
+        $this->_frontend = $frontendFactory();
+        $this->_pid = getmypid();
+        return $this->_frontend;
+    }
+
+    /**
+     * If the current _frontend is owned by a different pid, add it to $_parentFrontends so that the
+     * destructor isn't called on it.
+     *
+     * @return void
+     */
+    public function __destruct()
+    {
+        if (getmypid() !== $this->_pid) {
+            static::$_parentFrontends[] = $this->_frontend;
+        }
+    }
 }
