Added a config-main General option to delete sys.exitfunc.  The default
is not to do that.  VPython and student environment support.

M PyShell.py
M config-main.def
M run.py
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index abc9969..7d7a6e8 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -24,7 +24,7 @@
 exit_now = False
 quitting = False
 
-def main():
+def main(del_exitfunc=False):
     """Start the Python execution server in a subprocess
 
     In the Python subprocess, RPCServer is instantiated with handlerclass
@@ -44,6 +44,8 @@
     """
     global exit_now
     global quitting
+    global no_exitfunc
+    no_exitfunc = del_exitfunc
     port = 8833
     if sys.argv[1:]:
         port = int(sys.argv[1])
@@ -57,7 +59,7 @@
         try:
             if exit_now:
                 try:
-                    sys.exit(0)
+                    exit()
                 except KeyboardInterrupt:
                     # exiting but got an extra KBI? Try again!
                     continue
@@ -83,7 +85,7 @@
             except:
                 # Link didn't work, print same exception to __stderr__
                 traceback.print_exception(type, value, tb, file=sys.__stderr__)
-                sys.exit(0)
+                exit()
             else:
                 continue
 
@@ -159,6 +161,16 @@
     except (AttributeError, EOFError):
         pass
 
+def exit():
+    """Exit subprocess, possibly after first deleting sys.exitfunc
+
+    If config-main.cfg/.def 'General' 'delete-exitfunc' is True, then any
+    sys.exitfunc will be removed before exiting.  (VPython support)
+
+    """
+    if no_exitfunc:
+        del sys.exitfunc
+    sys.exit(0)
 
 class MyRPCServer(rpc.RPCServer):
 
@@ -186,7 +198,7 @@
             traceback.print_exc(file=erf)
             print>>erf, '\n*** Unrecoverable, server exiting!'
             print>>erf, '-'*40
-            sys.exit(0)
+            exit()
 
 
 class MyHandler(rpc.RPCHandler):
@@ -229,7 +241,7 @@
             exec code in self.locals
         except:
             if quitting:
-                sys.exit(0)
+                exit()
             # even print a user code SystemExit exception, continue
             print_exception()
         else: