Index: /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp	(revision 33008)
+++ /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp	(revision 33009)
@@ -45,4 +45,7 @@
 #endif
 #if defined(RT_OS_LINUX) || defined(RT_OS_OS2)
+/* While Solaris has posix_spawn() of course we don't want to use it as
+ * we need to have the child in a different process contract, no matter
+ * whether it is started detached or not. */
 # define HAVE_POSIX_SPAWN 1
 #endif
@@ -526,4 +529,12 @@
             if (phProcess)
                 *phProcess = pid;
+            else if (fFlags & (RTPROC_FLAGS_DAEMONIZE_DEPRECATED | RTPROC_FLAGS_DETACHED))
+            {
+                /* If the process is detached straight away wait for the
+                 * intermediate process to exit (it should do that quickly)
+                 * if the caller didn't want to know the PID. If it wants the
+                 * PID it's his job to wait for it or he gets a zombie. */
+                waitpid(pid, NULL, 0);
+            }
             return VINF_SUCCESS;
         }
@@ -561,5 +572,5 @@
 
     /*
-     * Performe the wait.
+     * Perform the wait.
      */
     int iStatus = 0;
