Если вы не хотите создавать расширение pcntl, хорошей альтернативой является использование proc_open ().
http://www.php.net/manual/en/function.proc-open.php
Используйте это вместе с stream_select (), чтобы ваш процесс PHP мог спать, пока что-то не произойдет с дочерним процессом, который вы создали.
Это эффективно создаст процесс в фоновом режиме, не блокируя родительский процесс PHP. Ваш PHP может читать и писать в STDIN, STDOUT, STDERR.
Чтобы завершить загрузку браузера (остановить индикатор прогресса загрузки), вы можете использовать то, что упомянул Милан Бабушков.
Ключ к тому, чтобы браузер думал, что HTTP-запрос завершен, - это отправка ему длины контента. Для этого вы можете начать буферизацию запроса, а затем сбросить его после отправки заголовка Content-Length.
например:
<?php
ob_start();
// render the HTML page and/or process stuff
header('Content-Length: '.ob_get_length());
ob_flush();
flush();
// can do more processing
?>