0

我在 Amazon EC2 Ubuntu 实例上运行同一 python 脚本的多个副本。每个副本依次使用此处提出的解决方案启动相同的子 Python 脚本

有时这些子进程中的一些会死掉。subprocess.check_output抛出异常并返回错误代码-9。我直接从提示符运行子进程,运行一段时间后,进程终止并显示不那么详细的消息Killed

问题:

  • 是什么-9意思?
  • 我怎样才能更多地了解出了什么问题?具体来说,我怀疑这可能是由于同一脚本的多个副本同时运行而导致机器过载。同时,我直接运行的特定子进程似乎在每次启动时都会死亡,无论是否直接启动,并且或多或少在同一时刻(即在处理或多或少相同数量的输入数据之后)。Python 没有产生任何错误消息。
  • 假设我在 Python 代码中没有错误,我该怎么做才能防止崩溃?
4

2 回答 2

1

check_output()在内存中累积子进程的输出。如果进程产生足够的输出,它可能会由于大量的 RAM 消耗而被oom Killer 杀死。

如果您不需要输出,则可以check_call()改用并丢弃输出:

import os
from subprocess import check_call, STDOUT

DEVNULL = open(os.devnull, "r+b")

check_call([command], stdout=DEVNULL, stderr=STDOUT)
于 2013-05-11T03:38:09.630 回答
0

-9 表示不可捕获或不可忽略的终止信号,或立即退出。

例如,如果您试图终止一个进程,您可以在终端中输入:

ps aux | grep processname

或者只是获取所有进程的列表:ps aux

获得要终止的进程的 pid 后,键入 kill -9 后跟 pid:

kill -9 1234 

关于日志,我的记忆有点模糊,但我会在 /var/log/ 中四处寻找,看看你是否找到任何东西,或者 dmesg。

至于防止 Python 代码崩溃,您是否尝试过任何异常处理?

Python 中的异常

于 2012-12-12T20:55:22.900 回答