1. Stake Freddy.
   e.g. further improve subprocess interrupt, exceptions, and termination.
2. Remove the workarounds in PyShell.py and ScriptBinding.py involving
   interrupting the subprocess prior to killing it, not necessary anymore.
3. Fix a bug introduced at PyShell Rev 1.66: was getting extra shell menu
   every time the shell window was recreated.

M PyShell.py
M ScriptBinding.py
M rpc.py
M run.py
diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py
index 8bb1aba..658aaf3 100644
--- a/Lib/idlelib/rpc.py
+++ b/Lib/idlelib/rpc.py
@@ -41,7 +41,6 @@
 import types
 import marshal
 
-import interrupt
 
 def unpickle_code(ms):
     co = marshal.loads(ms)
@@ -327,12 +326,9 @@
         while len(s) > 0:
             try:
                 n = self.sock.send(s)
-            except AttributeError:
+            except (AttributeError, socket.error):
                 # socket was closed
                 raise IOError
-            except socket.error:
-                self.debug("putmessage:socketerror:pid:%s" % os.getpid())
-                os._exit(0)
             else:
                 s = s[n:]
 
@@ -471,7 +467,6 @@
             self.responses[key] = ('EOF', None)
             cv.notify()
             cv.release()
-        interrupt.interrupt_main()
         # call our (possibly overridden) exit function
         self.exithook()