【问题标题】:Handling segmentation fault due to a C++ subprocess spawned by Python code处理由 Python 代码生成的 C++ 子进程导致的分段错误
【发布时间】:2017-03-12 02:19:07
【问题描述】:

我已经阅读了几篇关于 Python 信号处理的文章,但由于某种原因,我没有得到想要的输出。
这是我的 C++ 代码。它旨在模拟分段错误。
Python 代码的目的是将 C++ 程序作为子进程运行并捕获运行时错误(如果有)。

int main()
{
int*a;
a=NULL;
cout<<*a<<endl;
return 0;
}

python代码如下:

from subprocess import *
import signal

def handler(signum,frame):
    print "Error Occured",signum
    raise IOError("Segmentation Fault Occured.")

#The C++ code is already compiled

a = Popen(["./a.out"])
try:
    signal.signal(signal.SIGSEGV,handler)  
except IOError as e:
    print e

当 C++ 代码直接在终端上运行时,(不使用 Python 代码)这是输出:

Segmentation fault (core dumped)  

当使用 Python 代码运行相同的代码时,没有观察到任何输出。
我的方法出了什么问题?
提前谢谢你。

PS:我尝试了这个作为替代方案,它奏效了。但是,它不能用于我的应用程序,因为我不能使用 wait() 方法。

a.wait()
if a.returncode == -11:
    print "Segmentation fault, core dumped"

【问题讨论】:

    标签: python-2.7 subprocess child-process segmentation-fault signal-handling


    【解决方案1】:

    好的,问题解决了。而不是使用

    signal.signal(signal.SIGSEGV,handler)
    

    我使用了以下内容:

    signal.signal(signal.SIGCHLD,handler)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多