我准备一个脚本来评估来自其他人的一些代码,因此,我需要尽可能地限制执行环境。
该脚本是在python3.4下使用psutil和subprocess开发的,要运行的目标文件是一个编译的c ++代码,我应该避免的一切(非常大的内存分配,高CPU使用率,fork创建等)。
作为文档,我已经阅读this page和this repository以及this tutorial,但是当我从python调用进程时,它似乎忽略了任何限制
执行我的脚本的指令:
PROC = subprocess.Popen(["sleep 1 ; ./local_tmp/test"], shell=True, preexec_fn=preExecFunction)
为什么要睡1?因为根据this question,可以无限制地调用进程,因此,我将睡眠延迟,并为python提供时间来限制所有进程。
preExecFunction正在做什么?基本上是通过在python中调用资源的setrlimit函数来限制环境(我给出的第一个链接中的doc)
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库。