Primero que nada, y esto nada tiene que ver con UNIX / Linux: la función exec() de PHP espera a que el proceso termine a menos que su salida esté redireccionada y se le indique expresamente que debe ejecutarse en segundo plano.
Tu comando, si bien ejecuta "kmakemultires" en segundo plano, y redirige la salida (correcto), no hace lo mismo con "echo", por lo que el script no avanza hasta que el comando termina. Es por eso que cpulimit no llega a ejecutarse. Ten en cuenta también que es recomendable escribir la ruta completa hacia los programas, ya que nada te garantiza que cpulimit esté en el PATH del usuario que ejecuta tu programa.
Supongo que una solución posible es redirigir también la salida de echo hacia un archivo, y leer de ese archivo el PID. Pero eso es pura y exclusivamente asunto de PHP.
Si fuera tu, escribiría el programa entero como un script de shell, y en caso de ser necesario ejecutaría ese script desde PHP. Creo que sería tan sencillo como
script.sh
Código BASH:
Ver original#!/bin/sh
./kmakemultires -xmltemplate=./xml/multiframe.xml -config=./multires.config ./pano1/Panorama_r.jpg ./pano1/Panorama_r.jpg ./pano1/Panorama_d.jpg ./pano1/Panorama_u.jpg ./pano1/Panorama_l.jpg ./pano1/Panorama_f.jpg ./pano1/Panorama_b.jpg > /dev/null 2>&1 &
cpulimit --pid $! --limit 50
script.php
Saludos.