M PyShell.py
M rpc.py
Improve exception handing if peer process has terminated.
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 946e0b2..0c9fbfb 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -400,7 +400,10 @@
             from signal import SIGINT
         except ImportError:
             SIGINT = 2
-        os.kill(self.rpcpid, SIGINT)
+        try:
+            os.kill(self.rpcpid, SIGINT)
+        except OSError:    # subprocess may have already exited
+            pass
 
     def __request_interrupt(self):
         self.rpcclt.asynccall("exec", "interrupt_the_server", (), {})
diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py
index 54455a2..2939f5f 100644
--- a/Lib/idlelib/rpc.py
+++ b/Lib/idlelib/rpc.py
@@ -166,6 +166,8 @@
             return ("OK", ret)
         except SystemExit:
             raise
+        except socket.error:
+            pass
         except:
             self.debug("localcall:EXCEPTION")
             traceback.print_exc(file=sys.__stderr__)