处理由 Python 代码生成的 C++ 子进程引起的分段错误
Handling segmentation fault due to a C++ subprocess spawned by Python code
我在 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"
好的,问题已解决。而不是使用
signal.signal(signal.SIGSEGV,handler)
我使用了以下内容:
signal.signal(signal.SIGCHLD,handler)
我在 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"
好的,问题已解决。而不是使用
signal.signal(signal.SIGSEGV,handler)
我使用了以下内容:
signal.signal(signal.SIGCHLD,handler)