进程以退出代码 139 结束(被信号 11 中断:SIGSEGV)
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
我正在尝试执行 Python script,但出现以下错误:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
我在 Linux Mint 18.1 Serena OS
上使用 python 3.5.2
谁能告诉我为什么会这样,我该如何解决?
SIGSEGV 信号表示“segmentation violation”或"segfault"。或多或少,这相当于读取或写入未映射到进程中的内存地址。
这表示您的程序中存在错误。在 Python 程序中,这是解释器中的错误或正在使用的扩展模块中的错误(后者是最常见的原因)。
要解决此问题,您有多种选择。一种选择是制作一个最小的、self-contained、完整的示例来复制问题,然后将其作为错误报告提交给它使用的扩展模块的维护者。
另一种选择是尝试自行查找原因。 gdb 是这种努力中的一个有价值的工具,Python 的调试版本和所有正在使用的扩展模块也是如此。
安装 gdb 后,您可以将其用于 运行 您的 Python 程序:
gdb --args python <more args if you want>
然后使用gdb命令追查问题。如果你使用 run
那么你的程序将 运行 直到它崩溃,你将有机会使用其他 gdb 命令检查状态。
当我遇到这个问题时,我意识到存在一些内存问题。我重新启动电脑并解决了它。
一段时间后,我发现我是 运行 一个新的 TensorFlow 版本,在旧计算机上会出错。我解决了将 TensorFlow 版本降级到 1.4
的问题
另一个可能的原因(我今天遇到的)是您试图 read/write 一个打开的文件。在这种情况下,只需关闭文件并重新运行脚本即可解决问题。
在其他页面上找到。
口译员:python 3.8
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
这为我解决了问题。
我正在使用 2.7 获取 SIGSEGV,将我的 python 升级到 3.8,然后使用 OpenCV 出现不同的错误。并在 .
上找到了答案
但最终一行代码修复了它。
如果您的 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)
我在尝试使用 pyodbc
模块连接到 Oracle 数据库时收到同样的错误:
connection = pyodbc.connect()
错误发生在以下情况:
- 同一个数据库连接被多次打开python
文件
- 在调试模式下到达断点
当与数据库的连接打开时
可以通过以下方法避免错误消息:
- 只打开数据库一次并在所有需要的地方重复使用连接
- 使用后正确关闭DB连接
希望,这会对任何人有所帮助!
删除 python 解释器和 'venv' 文件夹解决了我的错误。
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)
对我来说,我使用 OpenCV 库来应用 SIFT。
在我的代码中,我将 cv2.SIFT() 替换为 cv2.SIFT_create() 并且问题消失了。
我在尝试在断开连接的外部 GPU 上 运行 我的代码时遇到了这个问题。我在未连接 GPU 2 的地方设置了 os.environ['PYOPENCL_CTX']=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
图书馆。
我在 PHP 中遇到此错误,而 运行 PHP 单元中。原因是循环依赖。
我正在尝试执行 Python script,但出现以下错误:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
我在 Linux Mint 18.1 Serena OS
上使用 python 3.5.2谁能告诉我为什么会这样,我该如何解决?
SIGSEGV 信号表示“segmentation violation”或"segfault"。或多或少,这相当于读取或写入未映射到进程中的内存地址。
这表示您的程序中存在错误。在 Python 程序中,这是解释器中的错误或正在使用的扩展模块中的错误(后者是最常见的原因)。
要解决此问题,您有多种选择。一种选择是制作一个最小的、self-contained、完整的示例来复制问题,然后将其作为错误报告提交给它使用的扩展模块的维护者。
另一种选择是尝试自行查找原因。 gdb 是这种努力中的一个有价值的工具,Python 的调试版本和所有正在使用的扩展模块也是如此。
安装 gdb 后,您可以将其用于 运行 您的 Python 程序:
gdb --args python <more args if you want>
然后使用gdb命令追查问题。如果你使用 run
那么你的程序将 运行 直到它崩溃,你将有机会使用其他 gdb 命令检查状态。
当我遇到这个问题时,我意识到存在一些内存问题。我重新启动电脑并解决了它。
一段时间后,我发现我是 运行 一个新的 TensorFlow 版本,在旧计算机上会出错。我解决了将 TensorFlow 版本降级到 1.4
的问题另一个可能的原因(我今天遇到的)是您试图 read/write 一个打开的文件。在这种情况下,只需关闭文件并重新运行脚本即可解决问题。
在其他页面上找到。 口译员:python 3.8
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
这为我解决了问题。
我正在使用 2.7 获取 SIGSEGV,将我的 python 升级到 3.8,然后使用 OpenCV 出现不同的错误。并在
但最终一行代码修复了它。
如果您的 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)
我在尝试使用 pyodbc
模块连接到 Oracle 数据库时收到同样的错误:
connection = pyodbc.connect()
错误发生在以下情况:
- 同一个数据库连接被多次打开python 文件
- 在调试模式下到达断点 当与数据库的连接打开时
可以通过以下方法避免错误消息:
- 只打开数据库一次并在所有需要的地方重复使用连接
- 使用后正确关闭DB连接
希望,这会对任何人有所帮助!
删除 python 解释器和 'venv' 文件夹解决了我的错误。
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)
对我来说,我使用 OpenCV 库来应用 SIFT。 在我的代码中,我将 cv2.SIFT() 替换为 cv2.SIFT_create() 并且问题消失了。
我在尝试在断开连接的外部 GPU 上 运行 我的代码时遇到了这个问题。我在未连接 GPU 2 的地方设置了 os.environ['PYOPENCL_CTX']=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
图书馆。
我在 PHP 中遇到此错误,而 运行 PHP 单元中。原因是循环依赖。