Python进程在Ubuntu上死亡:错误代码是什么意思?有修复程序吗?

Python进程在Ubuntu上死亡:错误代码是什么意思?有修复程序吗?,python,subprocess,termination,Python,Subprocess,Termination,我正在AmazonEC2Ubuntu实例上运行同一python脚本的多个副本。每个副本依次使用建议的解决方案启动相同的子Python脚本 有时这些子进程中的一些会死亡子流程。检查输出将引发异常并返回错误代码-9。我直接从提示符处运行子进程,运行了一段时间后,该进程终止,并显示一条不太详细的消息Killed 问题: -9是什么意思 我怎样才能更多地了解出了什么问题?具体地说,我怀疑这可能是由于同一脚本的多个副本同时运行导致机器过载所致。同时,我直接运行的特定子进程似乎在每次启动时都会消亡,不管是

我正在AmazonEC2Ubuntu实例上运行同一python脚本的多个副本。每个副本依次使用建议的解决方案启动相同的子Python脚本

有时这些子进程中的一些会死亡<代码>子流程。检查输出将引发异常并返回错误代码
-9
。我直接从提示符处运行子进程,运行了一段时间后,该进程终止,并显示一条不太详细的消息
Killed

问题:

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

-9表示无法捕获或忽略的终止信号,或只是立即退出

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

ps aux | grep processname
或者仅此即可获得所有进程的列表:
ps aux

一旦有了要终止的进程的pid,您就需要键入kill-9,后跟pid:

kill -9 1234 
关于日志,我的记忆有点模糊,但我会在/var/log/中搜索,看看您是否找到了什么,或者dmesg

在防止Python代码崩溃方面,您是否尝试过任何异常处理

检查输出()将子进程的输出累积到内存中。如果进程生成足够的输出,它可能会由于大量RAM消耗而被终止

如果不需要输出,可以使用
check_call()
替代,并放弃输出:

import os
from subprocess import check_call, STDOUT

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

check_call([command], stdout=DEVNULL, stderr=STDOUT)

如果您认为系统日志可能与操作系统有关,则可以查看系统日志
dmesg
将是一个开始。负返回码表示进程被信号终止-9意味着这是一个信号。(参见
kill-l
的输出)@Lev:I运行
dmesg-T
并看到以下内容:
内存不足:kill进程26365(python)得分166或牺牲子进程
,然后
kill进程26365(python)总vm:209736kB,anon rss:100140kB,文件rss:4kB
。所以我猜问题是实例正在运行我们的RAM。这就解释了为什么在进程终止时我没有收到任何Python错误。谢谢如果这是一个python错误,我希望在进程崩溃时,除了
Killed
之外,它至少会产生某种错误消息。但问题似乎出在机器的RAM上(见我上面的评论)