我有一个进程需要通过加载共享库来扩展。有没有一种方法可以在沙箱环境(外部进程除外)中运行共享库代码,以便在发生段错误时不会使进程崩溃,并且对可以分配的内存量、可以使用的 CPU 周期有限制等
最佳答案
我认为没有一种干净的方法可以做到这一点。您可以尝试:
- 捕获段错误并从中恢复(棘手、特定于架构,但可行)
- 使用可计算已分配空间的检测版本替换对库的 malloc/calloc 调用 ( how to replace default malloc by code )
- 或者使用 malloc Hook ( http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html )
- CPU 周期占整个过程的一部分,因此我认为没有任何方法可以仅获取库的信息。唯一可行的选择 - 手动测量代码进行的每个库调用的刻度。
本质上 - 这会很有趣,但我建议您采用单独的进程方法并使用 RPC、配额、ulimit 等。
关于Linux:是否可以对共享库代码进行沙箱处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27417561/