如何检测os.system的内存限制

时间:2011-11-02 19:12:46

标签: python memory-management

我目前正在使用os.fork和os.system命令设置并运行许多命令。我通过resource.setrlimit设置时间和内存限制,这似乎工作正常。但是,由于内存上限,每个程序都有自己的崩溃方式 - 一个python程序抛出一个MemoryError,一个c ++程序可能有一个错误的alloc等等。

我想知道的是我如何检测os.system命令何时因为内存限制限制(假设超时或其他一些完成方式)而完成执行。我尝试了以下但没有成功:

try:
    status = os.system(command)
except MemoryError:
    # Never actually makes it here...

编辑:我现在真的只关心unix系统。

2 个答案:

答案 0 :(得分:0)

请参阅http://blog.tsul.net/2008/04/ossystem-and-its-return-value.html

在Windows上,似乎system()和wait()都返回0。

在unix或mac上,system()将返回“包含其pid和退出状态指示的元组:一个16位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果信号编号为零);如果生成了核心文件,则设置低字节的高位。可用性:Macintosh,Unix。“

你应该能够查看低字节以查看信号是什么,并使用它来确定它被杀死/退出的原因。

答案 1 :(得分:0)

像这样的系统调用不太可能包装返回值并引发异常。

您必须自己使用子流程模块:http://docs.python.org/library/subprocess.html#module-subprocess

但是,根据您进行的系统调用,您可能不知道它是否由于内存错误而失败,除非它明确告诉您它。