簡體   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