c++ - registrarse - Detener un subproceso de Lua fuera de control
roblox gratis (3)
He incrustado a Lua en una aplicación Objective-C utilizando LuaObjCBridge. Necesito saber cómo detener el proceso Lua si toma demasiado tiempo (¿ciclo infinito?).
¿Funcionaría con un hilo separado ayuda?
La respuesta de Doug ya proporciona el valor predeterminado necesario para restringir la ejecución normal del código lua. Si necesita limitar esto por razones de seguridad, debe saber que existen formas conocidas de utilizar las llamadas a la biblioteca lua, como las funciones de coincidencia de patrones de cadenas , para crear bucles infinitos prácticos. El enganche de conteo de instrucción no los detectará por usted ya que el conteo de la instrucción lua no se incrementa mientras se ejecuta la llamada a la función c. Para una solución de este calibre, necesita restricciones de nivel de sistema operativo (proceso separado, interrupción de SIGALRM?)
La forma habitual de hacerlo es usar lua_sethook para programar una devolución de llamada para cada count
instrucciones VM; cuando la función de devolución de llamada lua_Hook ocurre después de un tiempo excesivo, su función de enlace puede generar un error forzando el control de su llamada protegida .
Para las restricciones de nivel de sistema operativo como menciones de kaizer.se, un buen enfoque para ejecutar Lua autónomo en sistemas * nix es usar ulimit -t 1
para restringir el proceso de Lua a un segundo de tiempo de CPU. Este es el enfoque del script CGI que impulsa la demostración en vivo en Lua.org .
Para una aplicación como la que describió, el uso de las instalaciones de subprocesos de su entorno es la mejor opción.