Explorar o código

Fixed wrongly placed os._exit() call, that prevents exit handler from work.
The child should not call os._exit(), otherwise existing subprocesses will not
terminated correctly. os._exit() should be called in the parent.


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@58580 15284696-431f-4ddb-bdfa-cd5b030d7da7

Soeren Gebbert %!s(int64=11) %!d(string=hai) anos
pai
achega
6c7f928067
Modificáronse 1 ficheiros con 13 adicións e 2 borrados
  1. 13 2
      gui/wxpython/core/utils.py

+ 13 - 2
gui/wxpython/core/utils.py

@@ -1063,12 +1063,23 @@ def GuiModuleMain(mainfn):
         # launch GUI in the background
         child_pid = os.fork()
         if child_pid == 0:
+            # To become the session leader of this new session and the process group
+            # leader of the new process group, we call os.setsid().  The process is
+            # also guaranteed not to have a controlling terminal.
+            os.setsid()
             mainfn()
-        os._exit(0)
+        else:      
+            # exit() or _exit()?
+            # _exit is like exit(), but it doesn't call any functions registered
+            # with atexit (and on_exit) or any registered signal handlers.  It also
+            # closes any open file descriptors.  Using exit() may cause all stdio
+            # streams to be flushed twice and any temporary files may be unexpectedly
+            # removed.  It's therefore recommended that child branches of a fork()
+            # and the parent branch(es) of a daemon use _exit().
+            os._exit(0)   # Exit parent of the child.
     else:
         mainfn()
 
-
 def PilImageToWxImage(pilImage, copyAlpha = True):
     """!Convert PIL image to wx.Image