【发布时间】:2011-07-02 10:26:40
【问题描述】:
(原谅我英语不好,我不是本地人)
我尝试了 Python 资源模块来限制子进程。
貌似设置RLIMIT_CPU可以成功限制cputime的数量,但是其他的比如RLIMIT_RSS根本就不行。
例如我使用下面的脚本调用child.py,并将RSS限制设置为(1024, 1024):
import os
import sys
import resource
import subprocess
def setlimits():
resource.setrlimit(resource.RLIMIT_RSS, (1024, 1024))
p = subprocess.Popen(["./child.py"], preexec_fn=setlimits)
print(p.wait())
child.py:
#!/usr/bin/env python3
import resource
print("RSS limit: ", resource.getrlimit(resource.RLIMIT_RSS))
a=[]
while True:
a.append(1) # deadloop, until eat up memory
子进程打印“RSS limit: (1024, 1024)”然后继续运行直到被杀死。 我可以看到 child.py 吃掉我的记忆,但 RLIMIT_RSS 不起作用。
我的操作系统是最新的 Archlinux(2.6.39 内核),Python 是 ver3.2。
【问题讨论】:
-
可能重复 - stackoverflow.com/questions/3043709/…。该链接还提供了解决方案。