diff --git a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php
index 22559bca2d090aba6e0bad4e5c746db8d00c9376..335844cce1973661a286edc264f4b0cbb7455d1e 100644
--- a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php
+++ b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php
@@ -382,9 +382,11 @@ protected function standUpServer($working_dir = NULL) {
       $this->stopServer();
     }
     // If there's not a server at this point, make one.
-    $this->serverProcess = $this->instantiateServer($this->getPortNumber(), $working_dir);
-    if ($this->serverProcess) {
-      $this->serverDocroot = $working_dir;
+    if (!$this->serverProcess || $this->serverProcess->isTerminated()) {
+      $this->serverProcess = $this->instantiateServer($this->getPortNumber(), $working_dir);
+      if ($this->serverProcess) {
+        $this->serverDocroot = $working_dir;
+      }
     }
   }
 
diff --git a/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php b/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php
index ae2c09708a2179f0abfd06434e6bfe08742ef875..b505ef83522c33404dc499d78508aa21173c514e 100644
--- a/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php
+++ b/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php
@@ -154,4 +154,35 @@ public function testPortMany() {
     }
   }
 
+  /**
+   * @covers ::standUpServer
+   */
+  public function testStandUpServer() {
+    // Stand up a server with working directory 'first'.
+    $this->standUpServer('first');
+
+    // Get the process object for the server.
+    $ref_process = new \ReflectionProperty(parent::class, 'serverProcess');
+    $ref_process->setAccessible(TRUE);
+    $first_process = $ref_process->getValue($this);
+
+    // Standing up the server again should not change the server process.
+    $this->standUpServer('first');
+    $this->assertSame($first_process, $ref_process->getValue($this));
+
+    // Standing up the server with working directory 'second' should give us a
+    // new server process.
+    $this->standUpServer('second');
+    $this->assertNotSame(
+      $first_process,
+      $second_process = $ref_process->getValue($this)
+    );
+
+    // And even with the original working directory name, we should get a new
+    // server process.
+    $this->standUpServer('first');
+    $this->assertNotSame($first_process, $ref_process->getValue($this));
+    $this->assertNotSame($second_process, $ref_process->getValue($this));
+  }
+
 }