当setrlimit已经设置为0时分叉?

时间:2017-11-10 13:31:24

标签: python c++ resources subprocess setrlimit

我准备一个脚本来评估来自其他人的一些代码,因此,我需要尽可能地限制执行环境。

该脚本是在python3.4下使用psutil和subprocess开发的,要运行的目标文件是一个编译的c ++代码,我应该避免的一切(非常大的内存分配,高CPU使用率,fork创建等)。

作为文档,我已经阅读this pagethis 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库。

0 个答案:

没有答案