¿Cómo puedo hacer cumplir un límite de tiempo en una llamada a `exec ()`?

Estoy tratando de hacer que un juez en línea escriba PHP. Mi código actualmente se ve así:

exec("gcc /var/www/qwerty.c -o /var/www/binary",$output,$returnval); print_r($output); exec("cat /var/www/qwe.txt | /var/www/binary",$output,$returnval); print_r($output); 

Sin embargo, quiero que cada proceso creado por el exec tenga como máximo 1 segundo para ejecutarse. No estoy seguro de cómo hacer esto. set_time_limit () no funciona

Yo usaría las funciones proc_ como lo sugiere @Adam Wright, pero una alternativa rápida a los entornos similares a Linux es usar el comando GNU timeout antes de su comando:

 // If it took more than 1 second, $returnval will got the exit code 124 exec('timeout 1 gcc /var/www/qwerty.c -o /var/www/binary', $output, $returnval); 

Probablemente puedas usar ulimit para eso:

 exec(" ( ulimit -t 1 ; gcc ... | /var/www/binary) "); 

Eso, por supuesto, solo funciona si el proceso usa tiempo de CPU activo, no si espera E / S interminablemente.

Esto se puede lograr usando la familia de funciones proc_ . Inicie sus procesos usando proc_open . Repetidamente proc_status usando proc_status (con algunos pequeños proc_status intermedios) hasta que el proceso haya regresado o haya transcurrido 1 segundo. Si transcurre 1 segundo sin proc_status indicando que el proceso ha finalizado, use proc_terminate (o proc_close ) para eliminarlo y tome las medidas apropiadas.

Sin embargo, no estoy diciendo que engendrar procesos externos en un script PHP sea una buena idea.