Shashank Shet
Shashank Shet

Reputation: 334

Handling segmentation fault due to a C++ subprocess spawned by Python code

I have read a few articles about signal handling in Python, and for some reason am not getting the desired output.
This is my C++ code. It is meant to simulate a segmentation fault.
The purpose of the Python code is to run the C++ program as a subprocess and to catch run time errors, if any.

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

The python code is as follows:

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

When the C++ code is run on the terminal directly, (not using the Python code) this is the output:

Segmentation fault (core dumped)  

When the same is run using the Python code, no output is observed.
What is going wrong in my approach?
Thanking you in advance.

PS: I tried this as an alternative and it worked. However, it cannot be used for my application since I cannot use wait() method.

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

Upvotes: 4

Views: 1262

Answers (1)

Shashank Shet
Shashank Shet

Reputation: 334

Okay the issue was solved. Instead of using

signal.signal(signal.SIGSEGV,handler)

I used the following:

signal.signal(signal.SIGCHLD,handler)

Upvotes: 1

Related Questions