diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 4c6b763..4964307 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -459,6 +459,16 @@
 STDOUT = -2
 
 
+def _eintr_retry_call(func, *args):
+    while True:
+        try:
+            return func(*args)
+        except OSError, 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.
@@ -1114,13 +1124,14 @@
                     os.close(errwrite)
 
                 # Wait for exec to fail or succeed; possibly raising exception
-                data = os.read(errpipe_read, 1048576) # Exceptions limited to 1 MB
+                # Exception limited to 1M
+                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:
@@ -1156,7 +1167,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 99f31b9..a9723b1 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
@@ -732,8 +733,27 @@
             p.terminate()
             self.assertNotEqual(p.wait(), 0)
 
+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():
-    test_support.run_unittest(ProcessTestCase)
+    test_support.run_unittest(ProcessTestCase,
+                              HelperFunctionTests)
     if hasattr(test_support, "reap_children"):
         test_support.reap_children()
 
diff --git a/Misc/NEWS b/Misc/NEWS
index c2a1247..b05b854 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -235,6 +235,9 @@
 - Issue #7481: When a threading.Thread failed to start it would leave the
   instance stuck in initial state and present in threading.enumerate().
 
+- Issue #1068268: The subprocess module now handles EINTR in internal
+  os.waitpid and os.read system calls where appropriate.
+
 Extension Modules
 -----------------
 
