diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index dc57c46..e0744d2 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -33,7 +33,7 @@
         return os.open(fname, os.O_RDWR|os.O_CREAT), fname
 
 
-class ProcessTestCase(unittest.TestCase):
+class BaseTestCase(unittest.TestCase):
     def setUp(self):
         # Try to minimize the number of children we have so this test
         # doesn't crash on some buildbots (Alphas in particular).
@@ -52,6 +52,9 @@
         actual = re.sub(r"\[\d+ refs\]\r?\n?$", "", stderr)
         self.assertEqual(actual, expected, msg)
 
+
+class ProcessTestCase(BaseTestCase):
+
     def test_call_seq(self):
         # call() function with sequence argument
         rc = subprocess.call([sys.executable, "-c",
@@ -559,17 +562,7 @@
 
 
 @unittest.skipIf(mswindows, "POSIX specific tests")
-class POSIXProcessTestCase(unittest.TestCase):
-    def setUp(self):
-        # Try to minimize the number of children we have so this test
-        # doesn't crash on some buildbots (Alphas in particular).
-        test_support.reap_children()
-
-    def tearDown(self):
-        for inst in subprocess._active:
-            inst.wait()
-        subprocess._cleanup()
-        self.assertFalse(subprocess._active, "subprocess._active not empty")
+class POSIXProcessTestCase(BaseTestCase):
 
     def test_exceptions(self):
         # caught & re-raised exceptions
@@ -654,7 +647,7 @@
         # Do not inherit file handles from the parent.
         # It should fix failures on some platforms.
         p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True,
-                             stdin=subprocess.PIPE)
+                             stdin=subprocess.PIPE, stderr=subprocess.PIPE)
 
         # Let the process initialize (Issue #3137)
         time.sleep(0.1)
@@ -675,7 +668,12 @@
 
     def test_send_signal(self):
         p = self._kill_process('send_signal', signal.SIGINT)
+        _, stderr = p.communicate()
         self.assertNotEqual(p.wait(), 0)
+        self.assertStderrEqual(stderr,
+            "Traceback (most recent call last):\n"
+            "  File \"<string>\", line 1, in <module>\n"
+            "KeyboardInterrupt\n")
 
     def test_kill(self):
         p = self._kill_process('kill')
@@ -687,17 +685,7 @@
 
 
 @unittest.skipUnless(mswindows, "Windows specific tests")
-class Win32ProcessTestCase(unittest.TestCase):
-    def setUp(self):
-        # Try to minimize the number of children we have so this test
-        # doesn't crash on some buildbots (Alphas in particular).
-        test_support.reap_children()
-
-    def tearDown(self):
-        for inst in subprocess._active:
-            inst.wait()
-        subprocess._cleanup()
-        self.assertFalse(subprocess._active, "subprocess._active not empty")
+class Win32ProcessTestCase(BaseTestCase):
 
     def test_startupinfo(self):
         # startupinfo argument
