2

私はPythonのシグナルハンドリングに関するいくつかの記事を読んでいますが、何らかの理由で目的の出力が得られません。
これは私のC++コードです。これは、セグメンテーションフォルトをシミュレートするためのものです。
Pythonコードの目的は、C++プログラムをサブプロセスとして実行し、実行時エラーがある場合はそれをキャッチすることです。Pythonコードで生成された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++コードを直接端末上で実行されると、これが出力される(Pythonコードを使用していない):

Segmentation fault (core dumped) 
次のように

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

Pythonコードであります

Pythonコードを使用して同じものを実行すると、出力は観察されません。
私のアプローチではどうなりますか?
ありがとうございます。

PS:これを代替として試してみました。しかし、私はwait()メソッドを使用することができないので、私のアプリケーションに使用することはできません。

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

答えて

0

問題は解決しました。代わりに

signal.signal(signal.SIGSEGV,handler) 

を使用して、私は次のように使用:

signal.signal(signal.SIGCHLD,handler) 
関連する問題