Una forma de hacerlo sería usando la misma página para todo, diferenciando por una variable GET la acción a ejecutar: procesar o esperar. Al entrar intentas coger un mutex; si puedes cogerlo realizas la opción q sea, si no quiere decir que estás ejecutando aun.
Un mutex es un mecanismo de exclusión, de forma que sólo el proceso que lo tenga puede ejecutar. El resto esperará hasta que quede libre el mutex. La forma más fácil de hacer esto con PHP es crear un directorio (proceso que el sistema operativo ya hace exluyentemente).
Código PHP:
if(!mkdir("cerrojo")){ // Coger mutex (crear directorio)
// el mutex ya está cogido
if($_GET['action'] == "procesar"){
// Si puede haber dos procesamientos a la vez, ejecutar directamente
// Si no pueden procesar a la vez esperar y volver a intentarlo
while(!mkdir("cerrojo")){
wait(1000); // Un segundo, lo que quieras
}
// Aquí el procesamiento en ambos casos
}else{
// Aun se está procesando, generar la página de espera
// Mediante javascript, refrescar la página recordando el parámetro GET
}
}else{
if($_GET['accion'] == "procesar"){
// Todo el procesamiento aqui
}else{
// Aquí la página de resultados
}
rmdir("cerrojo"); // Liberar el mutex (borrar directorio)
}
No recuerdo como refrescar la página con javascript, era algo de meta equivalent o algo así.
Un saludo