Buenas:
Yo sobre esto tendria que realizar pruebas ya que hay de todo. To comento lo que yo conozco:
1. fork: Como C y otros lenguajes fork es una instruccion que te permite crear hilos dentro de tu programa (recuerda que aqui programa es el documento que se esta ejecutando actualmente). Lo malo de fork es que cuando el padre finaliza su funcion los hijos tambien deberian finalizar, no estoy seguro como puede llegar a funcionar que el padre finalice primero. Empieza por
http://php.net/manual/es/function.pcntl-fork.php y ya apartir de aqui puedes buscar ejemplos.
2. Acabar con la conexion: puedes enviar todos los datos al cliente y terminar la conexion con el pero el programa quedarse haciendo sus cosas. Yo empezaria por aqui:
http://php.net/manual/en/features.connection-handling.php. Lo interesante de esto es aprender a usar estas funciones:
ob_end_flush();
flush();
ob_end_clean();
En el orden que recomienden en algun ejemplo y vaciar y cerrar el buffer al cliente para luego seguir haciendo lo que necesitas.
3. Uso de la shell: Simplemente ejecutar un programa desde el prompt o consola y no esperar a que termine (en linux creo que se suele colocar & comando para que se ejecute en segundo plano). tienes dos funciones:
http://php.net/manual/es/function.exec.php y
http://php.net/manual/es/function.shell-exec.php
Otra opcion y lo que esta de moda es llamar a un webservice pero la descarto ya que no se puede hacer asincronamente asi que tendrias que recurrir a opciones como la 3ra o usando curl asincronamente:
http://www.paul-norman.co.uk/2009/06/asynchronous-curl-requests
Y la ultima pero no he trabajado con ella pero que sepas que existe:
http://php.net/pthreads Son hilos o threads en php pero tambien hay que tener en cuenta que funcionará como fork y hay que mirar que sucede cuando acaba de ejecutarse tu programa.
Espero que sirva.
Saludos.