我不明白为什么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
最佳答案
问题是 RLIMIT_DATA is deprecated 。现在我们应该使用 RLIMIT_AS。如果您更改脚本来使用它,它将按预期工作。
关于Python 2.7 在执行后不保留其 ulimits?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852891/