我目前正在使用 os.fork 和 os.system 命令设置和运行一些命令。我通过 resource.setrlimit 设置了时间和内存限制,这似乎工作正常。然而,由于内存上限,每个程序都有自己的崩溃方式——python 程序会抛出 MemoryError,c++ 程序可能有错误的分配,等等。
我想知道的是我如何检测 os.system 命令何时因内存限制限制(假设超时或其他某种完成方式)而完成执行。我尝试了以下但没有成功:
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。"
您应该能够查看低字节以确定信号是什么,并使用它来确定它被杀死/退出的原因。
关于python - 如何检测 os.system 的内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986036/