2

저는 파이썬에서 신호 처리에 관한 몇 가지 기사를 읽었으며 어떤 이유로 원하는 결과를 얻지 못하고 있습니다.
이것은 내 C++ 코드입니다. 분할 결함을 시뮬레이트하기위한 것입니다.
파이썬 코드의 목적은 C++ 프로그램을 서브 프로세스로 실행하고 런타임 오류가있는 경우이를 잡는 것입니다.파이썬 코드에 의해 생성 된 C++ 하위 프로세스로 인한 분할 오류 처리

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++ 코드는 직접 단말기에서 실행되면, 이것은 출력 (파이썬 코드를 사용하지 않음) :

Segmentation fault (core dumped) 
다음

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

파이썬 코드는

파이썬 코드를 사용하여 동일한 코드를 실행하면 출력이 발생하지 않습니다.
내 접근 방식에 어떤 문제가 있습니까?
미리 감사드립니다.

추신 : 나는 이것을 대안으로 시도해 보았습니다. 그러나 wait() 메서드를 사용할 수 없으므로 응용 프로그램에 사용할 수 없습니다.

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

답변

0

좋아요. 문제가 해결되었습니다.

signal.signal(signal.SIGCHLD,handler) 
대신
signal.signal(signal.SIGSEGV,handler) 

를 사용하는 나는 다음을 사용