我正在准备一个脚本来评估来自其他人的一些代码,因此,我需要尽可能地限制执行环境。
该脚本是在 python3.4 下使用 psutil 和 subprocess 开发的,要运行的目标文件是编译后的 c++ 代码,其中包含我应该避免的一切(非常大的内存分配、高 cpu 使用率、fork 创建等)。
作为文档,我已经阅读了这个页面和这个存储库以及这个教程,但是,当我从 python 调用这个过程时,它似乎忽略了任何施加的限制。
执行我的脚本的指令:
PROC = subprocess.Popen(["sleep 1 ; ./local_tmp/test"], shell=True, preexec_fn=preExecFunction)
为什么要睡1?因为根据这个问题,可以无限制地调用一个进程,因此,我让睡眠来延迟它,并给 python 时间来限制所有进程。
preExecFunction 在做什么?基本上是通过调用python中资源的setrlimit函数来限制环境(我给出的第一个链接中的文档)
CPP代码段:
struct rlimit rl;
getrlimit (RLIMIT_NPROC, &rl);
printf("Default value is : %lld\n", (long long int)rl.rlim_cur);
int pid = fork();
printf("Default value is : %lld\n", (long long int)rl.rlim_cur);
printf("%d\n",pid);
CPP代码的输出
Default value is : 0
Default value is : 0
31670
给予的任何帮助将不胜感激。谢谢!
编辑:我以 root 用户身份运行 python 脚本,否则我无法运行 psutil 库。