diff --git a/org.eclipse.debug.core/META-INF/MANIFEST.MF b/org.eclipse.debug.core/META-INF/MANIFEST.MF
index 9c1ea44..60eb6d1 100644
--- a/org.eclipse.debug.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.debug.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.debug.core; singleton:=true
-Bundle-Version: 3.19.0.qualifier
+Bundle-Version: 3.19.100.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.debug.core.DebugPlugin
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/RuntimeProcess.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/RuntimeProcess.java
index 193458f..62a4e6c 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/RuntimeProcess.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/RuntimeProcess.java
@@ -107,6 +107,8 @@
 	 */
 	private boolean fTerminateDescendants = true;
 
+	private final String fThreadNameSuffix;
+
 	/**
 	 * Constructs a RuntimeProcess on the given system process
 	 * with the given name, adding this process to the given
@@ -146,14 +148,26 @@
 		} catch (CoreException e) {
 			DebugPlugin.log(e);
 		}
+		fThreadNameSuffix = getPidInfo(process, launch);
 
 		fStreamsProxy = createStreamsProxy();
-		fMonitor = new ProcessMonitorThread();
+		fMonitor = new ProcessMonitorThread(fThreadNameSuffix);
 		fMonitor.start();
 		launch.addProcess(this);
 		fireCreationEvent();
 	}
 
+	private static String getPidInfo(Process process, ILaunch launch) {
+		String pid;
+		ILaunchConfiguration lc = launch == null ? null : launch.getLaunchConfiguration();
+		String name = lc == null ? "" : " " + lc.getName(); //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+			pid = " for PID " + process.pid(); //$NON-NLS-1$
+		} catch (Exception e) {
+			pid = ""; //$NON-NLS-1$
+		}
+		return pid + name;
+	}
 	/**
 	 * Initialize the attributes of this process to those in the given map.
 	 *
@@ -355,7 +369,7 @@
 				DebugPlugin.log(e);
 			}
 		}
-		return new StreamsProxy(getSystemProcess(), charset);
+		return new StreamsProxy(getSystemProcess(), charset, fThreadNameSuffix);
 	}
 
 	/**
@@ -488,9 +502,11 @@
 		/**
 		 * Creates a new process monitor and starts monitoring the process for
 		 * termination.
+		 *
+		 * @param suffix Thread name suffix
 		 */
-		private ProcessMonitorThread() {
-			super(DebugCoreMessages.ProcessMonitorJob_0);
+		private ProcessMonitorThread(String suffix) {
+			super(DebugCoreMessages.ProcessMonitorJob_0 + suffix);
 			setDaemon(true);
 		}
 
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.java
index d38a64f..d17d3fc 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.java
@@ -89,7 +89,6 @@
 	public static String LogicalStructureProvider_1;
 	public static String LogicalStructureType_1;
 	public static String SystemPropertyResolver_0;
-	public static String InputStreamMonitor_label;
 	public static String Launch_terminate_failed;
 	public static String LaunchConfiguration_Failed_to_delete_launch_configuration__1;
 	public static String LaunchConfigurationDelegate_6;
@@ -115,7 +114,6 @@
 	public static String LaunchManager_invalid_config_name_char;
 	public static String LaunchManager_Source_locator_does_not_exist___0__13;
 	public static String LogicalStructureType_0;
-	public static String OutputStreamMonitor_label;
 	public static String ProcessMonitorJob_0;
 	public static String RuntimeProcess_terminate_failed;
 	public static String RuntimeProcess_Exit_value_not_available_until_process_terminates__1;
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.properties b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.properties
index eae7e6d..70ee71c 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.properties
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.properties
@@ -44,7 +44,6 @@
 GroupLaunchElement_inherit_launch_mode_label=Inherit
 GroupLaunchElement_outputRegexp=Wait for console output (regexp)
 SystemPropertyResolver_0=System property not specified
-InputStreamMonitor_label=Input Stream Monitor
 Launch_terminate_failed=Terminate failed
 LaunchConfiguration_Failed_to_delete_launch_configuration__1=Failed to delete launch configuration.
 LaunchConfiguration_9=Preparing launch delegate...
@@ -114,7 +113,6 @@
 LogicalStructureType_1=Required attribute {0} missing for logicalStructureType extension.
 LogicalStructureProvider_0=Required attribute modelIdentifier missing for logicalStructureType extension.
 LogicalStructureProvider_1=Required attribute class missing for logicalStructureType extension.
-OutputStreamMonitor_label=Output Stream Monitor
 ProcessMonitorJob_0=Process monitor
 RuntimeProcess_terminate_failed=Terminate failed
 RuntimeProcess_Exit_value_not_available_until_process_terminates__1=Exit value not available until process terminates.
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/InputStreamMonitor.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/InputStreamMonitor.java
index d0525f6..eacd9e3 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/InputStreamMonitor.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/InputStreamMonitor.java
@@ -127,13 +127,19 @@
 		}
 	}
 
+	public void startMonitoring() {
+		startMonitoring("Input Stream Monitor"); //$NON-NLS-1$
+	}
+
 	/**
 	 * Starts a thread which writes the stream.
+	 *
+	 * @param threadName Thread name
 	 */
-	public void startMonitoring() {
+	public void startMonitoring(String threadName) {
 		synchronized (this) {
 			if (fThread == null) {
-				fThread = new Thread((Runnable) this::write, DebugCoreMessages.InputStreamMonitor_label);
+				fThread = new Thread((Runnable) this::write, threadName);
 				fThread.setDaemon(true);
 				fThread.start();
 			}
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java
index 3a6f1a4..fb09bc6 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java
@@ -308,12 +308,14 @@
 
 	/**
 	 * Starts a thread which reads from the stream
+	 *
+	 * @param name Thread name
 	 */
-	protected void startMonitoring() {
+	protected void startMonitoring(String name) {
 		synchronized (this) {
 			if (fThread == null) {
 				fDone.set(false);
-				fThread = new Thread((Runnable) this::read, DebugCoreMessages.OutputStreamMonitor_label);
+				fThread = new Thread((Runnable) this::read, name);
 				fThread.setDaemon(true);
 				fThread.setPriority(Thread.MIN_PRIORITY);
 				fThread.start();
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/StreamsProxy.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/StreamsProxy.java
index 0f14b7d..3996d95 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/StreamsProxy.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/StreamsProxy.java
@@ -55,18 +55,19 @@
 	 *
 	 * @param process system process to create a streams proxy on
 	 * @param charset the process's charset or <code>null</code> if default
+	 * @param suffix Thread name suffix
 	 */
 	@SuppressWarnings("resource")
-	public StreamsProxy(Process process, Charset charset) {
+	public StreamsProxy(Process process, Charset charset, String suffix) {
 		if (process == null) {
 			return;
 		}
 		fOutputMonitor = new OutputStreamMonitor(process.getInputStream(), charset);
 		fErrorMonitor = new OutputStreamMonitor(process.getErrorStream(), charset);
 		fInputMonitor = new InputStreamMonitor(process.getOutputStream(), charset);
-		fOutputMonitor.startMonitoring();
-		fErrorMonitor.startMonitoring();
-		fInputMonitor.startMonitoring();
+		fOutputMonitor.startMonitoring("Output Stream Monitor" + suffix); //$NON-NLS-1$
+		fErrorMonitor.startMonitoring("Error Stream Monitor" + suffix); //$NON-NLS-1$
+		fInputMonitor.startMonitoring("Input Stream Monitor" + suffix); //$NON-NLS-1$
 	}
 
 	/**
@@ -83,7 +84,7 @@
 		// but Bug 562653 brought up a client which use this internal class via
 		// reflection and breaks without this constructor. So we restored the
 		// old constructor for the time being.
-		this(process, Charset.forName(encoding));
+		this(process, Charset.forName(encoding), ""); //$NON-NLS-1$
 	}
 
 	/**
diff --git a/org.eclipse.debug.tests/META-INF/MANIFEST.MF b/org.eclipse.debug.tests/META-INF/MANIFEST.MF
index 659b8de..1dffc2b 100644
--- a/org.eclipse.debug.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.debug.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.debug.tests;singleton:=true
-Bundle-Version: 3.12.600.qualifier
+Bundle-Version: 3.12.700.qualifier
 Bundle-Activator: org.eclipse.debug.tests.TestsPlugin
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.6.0,4.0.0)",
diff --git a/org.eclipse.debug.tests/pom.xml b/org.eclipse.debug.tests/pom.xml
index 02eb2f0..c55bdbc 100644
--- a/org.eclipse.debug.tests/pom.xml
+++ b/org.eclipse.debug.tests/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.debug</groupId>
   <artifactId>org.eclipse.debug.tests</artifactId>
-  <version>3.12.600-SNAPSHOT</version>
+  <version>3.12.700-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
     <code.ignoredWarnings>${tests.ignoredWarnings}</code.ignoredWarnings>
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/InputStreamMonitorTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/InputStreamMonitorTests.java
index 361995c..45f7756 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/InputStreamMonitorTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/InputStreamMonitorTests.java
@@ -25,7 +25,6 @@
 import java.util.function.Supplier;
 
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.debug.internal.core.DebugCoreMessages;
 import org.eclipse.debug.internal.core.InputStreamMonitor;
 import org.eclipse.debug.tests.AbstractDebugTest;
 import org.eclipse.debug.tests.TestUtil;
@@ -96,9 +95,10 @@
 	@Test
 	@SuppressWarnings("resource")
 	public void testClose() throws Exception {
+		String threadName = "MAGICtestClose";
 		Supplier<Long> getInputStreamMonitorThreads = () -> {
 			Set<Thread> allThreads = Thread.getAllStackTraces().keySet();
-			long numMonitorThreads = allThreads.stream().filter(t -> DebugCoreMessages.InputStreamMonitor_label.equals(t.getName())).count();
+			long numMonitorThreads = allThreads.stream().filter(t -> t.getName().contains(threadName)).count();
 			return numMonitorThreads;
 		};
 		long alreadyLeakedThreads = getInputStreamMonitorThreads.get();
@@ -117,7 +117,7 @@
 		{
 			ClosableTestOutputStream testStream = new ClosableTestOutputStream();
 			InputStreamMonitor monitor = new InputStreamMonitor(testStream);
-			monitor.startMonitoring();
+			monitor.startMonitoring(threadName);
 			assertEquals("Stream closed to early.", 0, testStream.numClosed);
 			monitor.close();
 			TestUtil.waitWhile(() -> testStream.numClosed == 0, 200);
@@ -126,7 +126,7 @@
 		{
 			ClosableTestOutputStream testStream = new ClosableTestOutputStream();
 			InputStreamMonitor monitor = new InputStreamMonitor(testStream);
-			monitor.startMonitoring();
+			monitor.startMonitoring(threadName);
 			assertEquals("Stream closed to early.", 0, testStream.numClosed);
 			monitor.closeInputStream();
 			monitor.close();
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/OutputStreamMonitorTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/OutputStreamMonitorTests.java
index 0d36102..523192a 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/OutputStreamMonitorTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/OutputStreamMonitorTests.java
@@ -195,9 +195,8 @@
 			super(stream, charset);
 		}
 
-		@Override
 		public void startMonitoring() {
-			super.startMonitoring();
+			super.startMonitoring("");
 		}
 
 		@Override
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/StreamsProxyTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/StreamsProxyTests.java
index 7156914..571da15 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/StreamsProxyTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/StreamsProxyTests.java
@@ -66,7 +66,7 @@
 		final String s = prefix + String.join("", Collections.nCopies(numTwoByteCharacters, "\u00F8"));
 		final ByteArrayInputStream stdout = new ByteArrayInputStream(s.getBytes(StandardCharsets.UTF_8));
 		final Process mockProcess = new MockProcess(stdout, null, 0);
-		final StreamsProxy streamProxy = new StreamsProxy(mockProcess, StandardCharsets.UTF_8);
+		final StreamsProxy streamProxy = new StreamsProxy(mockProcess, StandardCharsets.UTF_8, "");
 		streamProxy.close();
 		final String readContent = streamProxy.getOutputStreamMonitor().getContents();
 		assertEquals("Process output got corrupted.", s, readContent);
