Iniciar proceso en segundo plano / demonio desde el script CGI

Estoy intentando iniciar un proceso en segundo plano desde un script CGI. Básicamente, cuando se envía un formulario, el script CGI le indicará al usuario que su solicitud se está procesando, mientras que el script de fondo realiza el procesamiento real (porque el procesamiento tiende a tomar mucho tiempo). El problema que estoy enfrentando es que Apache no enviará la salida del script CGI principal al navegador hasta que el script secundario finalice.

Un colega me dijo que lo que quiero hacer es imposible porque no hay forma de evitar que Apache espere a que muera todo el árbol de procesos de un script CGI. Sin embargo, también he visto numerosas referencias en la web a un truco de "doble tenedor" que se supone que hace el trabajo. El truco se describe sucintamente enesta respuesta de desbordamiento de pila, pero he visto un código similar en otro lugar.

Aquí hay un breve script que escribí para probar el truco de doble tenedor en Python:

import os
import sys

if os.fork():
    print 'Content-type: text/html\n\n Done'
    sys.exit(0)

if os.fork():
    os.setsid()
    sys.exit(0)

# Second child
os.chdir("/")
sys.stdout.close()
sys.stderr.close()
sys.stdin.close()

f = open('/tmp/lol.txt', 'w')

while 1:
     f.write('test\n')

Si ejecuto esto desde el shell, hace exactamente lo que esperaría: el script original y el primer descendiente mueren, y el segundo descendiente sigue ejecutándose hasta que se elimina manualmente. Pero si accedo a través de CGI, la página no se cargará hasta que mate al segundo descendiente o Apache la mate debido al tiempo de espera de CGI. También he intentado reemplazar la segundasys.exit(0) conos._exit(0), pero no hay diferencia.

¿Qué estoy haciendo mal

Respuestas a la pregunta(10)

Su respuesta a la pregunta