【问题标题】:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)进程以退出代码 139 结束(被信号 11 中断:SIGSEGV)
【发布时间】:2018-08-31 01:48:17
【问题描述】:

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

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

我在 Linux Mint 18.1 Serena 操作系统上使用 python 3.5.2

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

【问题讨论】:

    标签: python python-3.5 segmentation-fault linux-mint


    【解决方案1】:

    SIGSEGV 信号指示“segmentation violation”或“segfault”。或多或少,这相当于读取或写入未在进程中映射的内存地址。

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我的情况在使用 tensorflow-gpu 1.9.0 而不是 1.8.0 后得到解决。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果您的 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)
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              我在尝试使用 pyodbc 模块连接到 Oracle 数据库时收到同样的错误:

              connection = pyodbc.connect()
              

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

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

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

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

              希望对任何人都有帮助!

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

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

                  python中有一个模块名称signal,通过它可以处理这种OS信号。

                  如果你想忽略这个 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) 
                  

                  【讨论】:

                    【解决方案10】:

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

                    【讨论】:

                      【解决方案11】:

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

                      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 包来解决这个问题。与this 非常相似的解决方案。

                      【讨论】:

                        【解决方案12】:

                        在其他页面上找到。 解释器: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 an error set 上找到答案。

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

                        【讨论】:

                          猜你喜欢
                          • 2019-11-25
                          • 2022-01-26
                          • 1970-01-01
                          • 2021-09-12
                          • 2020-07-02
                          • 2020-12-05
                          • 1970-01-01
                          • 2018-05-03
                          相关资源
                          最近更新 更多