This is an automated email from the ASF dual-hosted git repository.

jbarrett pushed a commit to branch wip/exec
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 0da69fef873b62bb4a06bcffbc9237251477fca3
Author: Jacob Barrett <[email protected]>
AuthorDate: Sun Feb 7 13:41:50 2021 -0800

    Redirect to/from /dev/null
---
 .../internal/cli/commands/StartLocatorCommand.java   | 20 +++++++++++++++++---
 .../internal/cli/commands/StartServerCommand.java    | 20 +++++++++++++++++---
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
index 859e1d8..ef737bd 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
@@ -15,6 +15,10 @@
 
 package org.apache.geode.management.internal.cli.commands;
 
+import static java.lang.ProcessBuilder.Redirect.from;
+import static java.lang.ProcessBuilder.Redirect.to;
+import static org.apache.geode.internal.util.IOUtils.close;
+
 import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
@@ -221,8 +225,9 @@ public class StartLocatorCommand extends OfflineGfshCommand 
{
     final Process locatorProcess =
         getProcess(locatorLauncher.getWorkingDirectory(), locatorCommandLine);
 
-    locatorProcess.getInputStream().close();
-    locatorProcess.getOutputStream().close();
+    // These should be redirected to /dev/null but close to be safe.
+    close(locatorProcess.getInputStream());
+    close(locatorProcess.getOutputStream());
 
     // fix TRAC bug #51967 by using NON_BLOCKING on Windows
     final ProcessStreamReader.ReadingMode readingMode = SystemUtils.isWindows()
@@ -287,6 +292,9 @@ public class StartLocatorCommand extends OfflineGfshCommand 
{
       // stop will close
       
stderrReader.stopAsync(StartMemberUtils.PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS);
 
+      // the readers doesn't seem to close so just in case we close here.
+      close(locatorProcess.getErrorStream());
+
       // ErrorStream
       getGfsh().getSignalHandler().unregisterListener(locatorSignalListener);
     }
@@ -346,10 +354,16 @@ public class StartLocatorCommand extends 
OfflineGfshCommand {
     return result;
   }
 
+  static final File DEV_NULL = new File(System.getProperty("os.name")
+      .startsWith("Windows") ? "NUL" : "/dev/null");
+
   Process getProcess(String workingDir, String[] locatorCommandLine)
       throws IOException {
     return new ProcessBuilder(locatorCommandLine)
-        .directory(new File(workingDir)).start();
+        .directory(new File(workingDir))
+        .redirectInput(from(DEV_NULL))
+        .redirectOutput(to(DEV_NULL))
+        .start();
   }
 
   // TODO should we connect implicitly when in non-interactive, headless mode 
(e.g. gfsh -e "start
diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
index 6e4eec8..bd30b14 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
@@ -14,6 +14,10 @@
  */
 package org.apache.geode.management.internal.cli.commands;
 
+import static java.lang.ProcessBuilder.Redirect.from;
+import static java.lang.ProcessBuilder.Redirect.to;
+import static org.apache.geode.internal.util.IOUtils.close;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -349,8 +353,9 @@ public class StartServerCommand extends OfflineGfshCommand {
     Process serverProcess =
         getProcess(serverLauncher.getWorkingDirectory(), serverCommandLine);
 
-    serverProcess.getInputStream().close();
-    serverProcess.getOutputStream().close();
+    // These should be redirected to /dev/null but close to be safe.
+    close(serverProcess.getInputStream());
+    close(serverProcess.getOutputStream());
 
     // fix TRAC bug #51967 by using NON_BLOCKING on Windows
     final ProcessStreamReader.ReadingMode readingMode = SystemUtils.isWindows()
@@ -413,8 +418,12 @@ public class StartServerCommand extends OfflineGfshCommand 
{
       } while (!(registeredServerSignalListener && 
serverSignalListener.isSignaled())
           && serverState.isStartingOrNotResponding());
     } finally {
-      
stderrReader.stopAsync(StartMemberUtils.PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS);
       // stop will close ErrorStream
+      
stderrReader.stopAsync(StartMemberUtils.PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS);
+
+      // the readers doesn't seem to close so just in case we close here.
+      close(serverProcess.getErrorStream());
+
       getGfsh().getSignalHandler().unregisterListener(serverSignalListener);
     }
 
@@ -431,8 +440,13 @@ public class StartServerCommand extends OfflineGfshCommand 
{
     }
   }
 
+  static final File DEV_NULL = new File(System.getProperty("os.name")
+      .startsWith("Windows") ? "NUL" : "/dev/null");
+
   Process getProcess(String workingDir, String[] serverCommandLine) throws 
IOException {
     return new ProcessBuilder(serverCommandLine)
+        .redirectInput(from(DEV_NULL))
+        .redirectOutput(to(DEV_NULL))
         .directory(new File(workingDir)).start();
   }
 

Reply via email to