繁体   English   中英

进程以退出代码 139 结束(被信号 11 中断:SIGSEGV)

[英]Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

我正在尝试执行Python 脚本,但出现以下错误:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

我在 Linux Mint 18.1 Serena OS 上使用 python 3.5.2

谁能告诉我为什么会这样,我该如何解决?

SIGSEGV 信号指示“分段违规”或“段错误”。 或多或少,这相当于读取或写入未在进程中映射的内存地址。

这表明您的程序中存在错误。 在 Python 程序中,这要么是解释器中的错误,要么是正在使用的扩展模块中的错误(后者是最常见的原因)。

要解决此问题,您有多种选择。 一种选择是生成一个最小的、独立的、完整的示例来复制问题,然后将其作为错误报告提交给它使用的扩展模块的维护者。

另一种选择是尝试自己找出原因。 gdb是一个有价值的工具,它是 Python 的调试版本和所有正在使用的扩展模块。

安装 gdb 后,您可以使用它来运行 Python 程序:

gdb --args python <more args if you want>

然后使用 gdb 命令来追踪问题。 如果您使用run那么您的程序将一直运行,直到它崩溃,您将有机会使用其他 gdb 命令检查状态。

另一个可能的原因(我今天遇到的)是你试图读/写一个打开的文件。 在这种情况下,只需关闭文件并重新运行脚本即可解决问题。

一段时间后,我发现我正在运行一个新的 TensorFlow 版本,它在旧计算机上出现错误。 我解决了将 TensorFlow 版本降级到 1.4 的问题

当我遇到这个问题时,我意识到存在一些内存问题。 我重新启动PC并解决了它。

如果您的 C 程序(例如,使用cpython试图越界访问变量)也会出现这种情况


ctypedef struct ReturnRows:
    double[10] your_value

cdef ReturnRows s_ReturnRows # Allocate memory for the struct
s_ReturnRows.your_value = [0] * 12

将失败

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

对我来说,我使用 OpenCV 库来应用 SIFT。 在我的代码中,我将 cv2.SIFT() 替换为 cv2.SIFT_create() 并且问题消失了。

尝试使用pyodbc模块连接到 Oracle DB 时,我收到了同样的错误:

connection = pyodbc.connect()

错误发生在以下几种情况:

  • 数据库连接已在同一个 python 文件中多次打开
  • 在调试模式下,在打开与 DB 的连接时已到达断点

可以通过以下方法避免错误消息:

  • 只打开一次数据库并在所有需要的地方重用连接
  • 使用后正确关闭数据库连接

希望,这会帮助任何人!

删除了 python 解释器和 'venv' 文件夹解决了我的错误。

11 : SIGSEGV - 当内存段被非法访问时出现此信号。

python中有一个模块名称信号,您可以通过它处理这种操作系统信号。

如果你想忽略这个SIGSEGV信号,你可以这样做:

signal.signal(signal.SIGSEGV, signal.SIG_IGN)

但是,忽略信号可能会导致代码出现一些不适当的行为,因此最好使用定义的处理程序来处理SIGSEGV信号,如下所示:

def SIGSEGV_signal_arises(signalNum, stack):
    print(f"{signalNum} : SIGSEGV arises")
    # Your code

signal.signal(signal.SIGSEGV, SIGSEGV_signal_arises) 

当我尝试在断开连接的外部 GPU 上运行我的代码时遇到了这个问题。 我将os.environ['PYOPENCL_CTX']=2设置为未连接 GPU 2。 所以我只需要将代码更改为 os.environ ['PYOPENCL_CTX'] = 1

对我来说,这三行代码已经重现了错误,无论有多少可用内存

import numpy as np
from sklearn.cluster import KMeans

X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
kmeans = KMeans(n_clusters=1, random_state=0).fit(X)

我可以通过删除重新安装scikit-learn包来解决这个问题。 一个非常相似的解决方案。

如果尝试使用 concurrent.futures 复合线程,也会发生这种情况。 例如,在另一个 .map 调用中调用 .map。

这可以通过删除 .map 调用之一来解决。

我在使用 scikit-learn 的 kmeans 时遇到了同样的问题。 从 scikit-learn 1.0 升级到 1.0.2 为我解决了这个问题。

此问题通常是由您的环境中不兼容的库引起的。 就我而言,它是pyspark库。

在运行 PHPUnit 时,我在 PHP 中遇到了这个错误。 原因是循环依赖。

就我而言,恢复我最近的 conda 安装解决了这种情况。

导入 monai 时出现此错误。 我新建conda环境后解决了。 我能想到的可能原因是不同包之间存在一些冲突,或者我的环境名称与我要导入的 package 名称相同(monai)。

我通过更新python库解决了这个问题。 就我而言,它是scikit-learn:

pip install -U scikit-learn

在其他页面上找到。 解释器:python 3.8

cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

这为我解决了问题。 我用 2.7 获得 SIGSEGV,将我的 python 升级到 3.8,然后用 OpenCV 得到不同的错误。 并在OpenCV 4.0.0 SystemError: <class 'cv2.CascadeClassifier'> returned a result with a error set上找到答案。

但最终一行代码修复了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM