我已經在使用LuaObjCBridge的Objective-C應用程序中嵌入了Lua。如果需要太多時間(無限循環?),我需要知道如何停止Lua進程。停止失控的Lua子進程
會在單獨的線程幫助下運行它嗎?
我已經在使用LuaObjCBridge的Objective-C應用程序中嵌入了Lua。如果需要太多時間(無限循環?),我需要知道如何停止Lua進程。停止失控的Lua子進程
會在單獨的線程幫助下運行它嗎?
執行此操作的常用方法是使用lua_sethook按虛擬機指令每count
安排一次回調;當過了一段時間回調lua_Hook功能發生後,您的掛鉤功能可以raise an error強制控制到您的protected call。
Doug的回答已經提供了限制正常lua代碼執行所需的默認值。如果您出於安全原因需要限制這一點,您應該知道有已知的方法可以使用lua庫調用such as string pattern matching functions來創建實際的無限循環。由於lua指令計數在c函數調用執行期間沒有遞增,因此指令計數掛鉤不會爲您捕獲這些指針。對於這個口徑的解決方案,您需要OS級別的限制(單獨的進程,從SIGALRM中斷?)
謝謝,kaiser.se,+1。 – 2010-05-06 13:15:31
對於像kaiser.se提到的操作系統級別的限制,一個好的方法在* nix系統上獨立運行Lua將使用ulimit -t 1
將Lua進程限制爲CPU時間的一秒。這是供電live demo on Lua.org使用的方法the CGI script。
對於像你所描述的應用程序,使用環境的線程設施是最好的選擇。
但是這會消耗多少速度? – 2010-05-17 04:54:29
這取決於你設置了多少個'count'指令。 – 2011-05-16 20:26:33