我目前正在设置和运行一些命令os.fork操作系统以及操作系统命令。我设定了时间和内存限制资源.setrlimit,而且看起来效果不错。然而,每个程序都有它自己的崩溃方式,因为内存上限——python程序抛出内存错误,c++程序可能有错误的分配,等等
我想知道的是当操作系统由于内存限制(假设超时或其他完成方式),命令已完成执行。我尝试过以下方法,但没有成功:
try:
status = os.system(command)
except MemoryError:
# Never actually makes it here...
编辑:我现在只关心unix系统。在
见http://blog.tsul.net/2008/04/ossystem-and-its-return-value.html
在windows上,system()和wait()似乎都始终返回0。在
在unix或mac上,system()将返回“一个包含其pid和退出状态指示的元组:一个16位数字,其低位字节是终止进程的信号号,其高位字节是退出状态(如果信号号为零);如果生成核心文件,则设置低位字节的高位。可用性:Macintosh、Unix。”
您应该能够查看低字节,看看信号是什么,并使用它来确定它被终止/退出的原因。在
这样的系统调用不太可能包装返回值并引发异常。在
您必须自己使用子流程模块:http://docs.python.org/library/subprocess.html#module-subprocess
然而,根据您所做的系统调用,您可能不知道它是否由于内存错误而失败,除非它明确地告诉您它失败了。在
相关问题 更多 >
编程相关推荐