diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 6e753cb..3017432 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -406,6 +406,16 @@
 STDOUT = -2
 
 
+def _eintr_retry_call(func, *args):
+    while True:
+        try:
+            return func(*args)
+        except OSError as e:
+            if e.errno == errno.EINTR:
+                continue
+            raise
+
+
 def call(*popenargs, **kwargs):
     """Run command with arguments.  Wait for command to complete, then
     return the returncode attribute.
@@ -1133,13 +1143,13 @@
 
                 # Wait for exec to fail or succeed; possibly raising an
                 # exception (limited to 1 MB)
-                data = os.read(errpipe_read, 1048576)
+                data = _eintr_retry_call(os.read, errpipe_read, 1048576)
             finally:
                 # be sure the FD is closed no matter what
                 os.close(errpipe_read)
 
             if data:
-                os.waitpid(self.pid, 0)
+                _eintr_retry_call(os.waitpid, self.pid, 0)
                 child_exception = pickle.loads(data)
                 for fd in (p2cwrite, c2pread, errread):
                     if fd is not None:
@@ -1175,7 +1185,7 @@
             """Wait for child process to terminate.  Returns returncode
             attribute."""
             if self.returncode is None:
-                pid, sts = os.waitpid(self.pid, 0)
+                pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
                 self._handle_exitstatus(sts)
             return self.returncode
 
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 24fa79b..685fabe 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -4,6 +4,7 @@
 import sys
 import signal
 import os
+import errno
 import tempfile
 import time
 import re
@@ -797,12 +798,31 @@
         ProcessTestCase.tearDown(self)
 
 
+class HelperFunctionTests(unittest.TestCase):
+    def test_eintr_retry_call(self):
+        record_calls = []
+        def fake_os_func(*args):
+            record_calls.append(args)
+            if len(record_calls) == 2:
+                raise OSError(errno.EINTR, "fake interrupted system call")
+            return tuple(reversed(args))
+
+        self.assertEqual((999, 256),
+                         subprocess._eintr_retry_call(fake_os_func, 256, 999))
+        self.assertEqual([(256, 999)], record_calls)
+        # This time there will be an EINTR so it will loop once.
+        self.assertEqual((666,),
+                         subprocess._eintr_retry_call(fake_os_func, 666))
+        self.assertEqual([(256, 999), (666,), (666,)], record_calls)
+
+
 def test_main():
     unit_tests = (ProcessTestCase,
                   POSIXProcessTestCase,
                   Win32ProcessTestCase,
                   CommandTests,
-                  ProcessTestCaseNoPoll)
+                  ProcessTestCaseNoPoll,
+                  HelperFunctionTests)
 
     support.run_unittest(*unit_tests)
     support.reap_children()
