Python setrlimit已设置为0时分叉?

Python setrlimit已设置为0时分叉?,python,c++,resources,subprocess,setrlimit,Python,C++,Resources,Subprocess,Setrlimit,我正在准备一个脚本来评估来自其他人的一些代码,因此,我需要尽可能地限制执行环境 脚本是在Python 3.4下使用PsUTIL和子进程开发的,要运行的目标文件是一个编译的C++代码,它应该避免所有(非常大的内存分配、CPU使用率高、创建叉等)。 作为文档,我已经阅读了,但当我从python调用该进程时,它似乎忽略了强加的任何限制 执行我的脚本的指令: PROC = subprocess.Popen(["sleep 1 ; ./local_tmp/test"], shell=True, preex

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

脚本是在Python 3.4下使用PsUTIL和子进程开发的,要运行的目标文件是一个编译的C++代码,它应该避免所有(非常大的内存分配、CPU使用率高、创建叉等)。 作为文档,我已经阅读了,但当我从python调用该进程时,它似乎忽略了强加的任何限制

执行我的脚本的指令:

PROC = subprocess.Popen(["sleep 1 ; ./local_tmp/test"], shell=True, preexec_fn=preExecFunction)
为什么睡1?因为根据一个进程可以被无限制地调用,因此,我将使用睡眠来延迟它,并给python时间来限制所有进程

preExecFunction在做什么?基本上是通过调用python中resource的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库。

我发现这种行为是由root用户引起的。当我从一个没有特权的用户手动运行脚本时,它给出并遵守了限制,但是,如果使用根权限从python调用,它似乎根本不起作用。。。如果我以非特权用户的身份运行脚本,则会显示消息“Cannot fork”(我猜是因为我需要是特权用户才能使用subprocess.popen)。