LuaObjCBridgeを使用してLuaをObjective-Cアプリケーションに埋め込みました。時間がかかりすぎる場合(無限ループ?)、Luaプロセスを停止する方法を知る必要があります。
別のスレッドで実行すると役立ちますか?
LuaObjCBridgeを使用してLuaをObjective-Cアプリケーションに埋め込みました。時間がかかりすぎる場合(無限ループ?)、Luaプロセスを停止する方法を知る必要があります。
別のスレッドで実行すると役立ちますか?
これを行う通常の方法は、lua_sethookcount
を使用してVM 命令ごとにコールバックをスケジュールすることです。過度の時間の経過後にコールバックlua_Hook関数が発生すると、フック関数がエラーを発生させ、制御を保護された呼び出しに強制する可能性があります。
Doug の回答では、通常の lua コードの実行を制限するために必要なデフォルトが既に提供されています。セキュリティ上の理由でこれを制限する必要がある場合は、実用的な無限ループを作成するために、文字列パターン マッチング関数などのlua ライブラリ呼び出しを使用する既知の方法があることを知っておく必要があります。c 関数呼び出しの実行中に lua 命令カウントがインクリメントされないため、命令カウント フックはこれらをキャッチしません。この口径のソリューションには、OS レベルの制限 (別のプロセス、SIGALRM からの割り込み?) が必要です。
kaizer.se の言及のような OS レベルの制限については、*nix システムで Lua をスタンドアロンで実行するための 1 つの適切なアプローチはulimit -t 1
、Lua プロセスを 1 秒の CPU 時間に制限するために使用することです。これは、Lua.orgのライブ デモを強化する CGI スクリプトが使用するアプローチです。
あなたが説明したようなアプリケーションの場合、環境のスレッド機能を使用することが最良のオプションです。