我不明白为什么Python在执行exec时没有保留其ulimits。我创建了这个小测试用例:
import os
import resource
print "Heap limit:", resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (100, -1))
print "Heap limit:", resource.getrlimit(resource.RLIMIT_DATA)
os.execve("/bin/ls", ["/bin/ls","/etc/passwd"], dict())
我的Ubuntu 14.04(Python 2.7.6)中的输出是:
Heap limit: (-1, -1)
Heap limit: (100, -1)
/etc/passwd
当然,您无法使用该数量的虚拟内存执行ls:
$ sh -c "ulimit -v 100; ls /etc/passwd"
Killed