在Linux上,我有一個我希望通過Python腳本運行的可執行文件。可執行文件除以0,我似乎無法處理來自子進程的信號。 我看了一下,似乎preexec_fn應該處理SIGFPE,但目前還沒有運氣。如何使用子進程和preexec_fn處理子SIGFPE/SIGILL信號?
我使用Python 2.7
我的代碼:
# b.py
import os
import subprocess
import signal
import sys
def pref_fun():
signal.signal(signal.SIGFPE,foo)
def foo(signal,frame):
print "Caught signal!"
sys.exit(0)
sub = subprocess.Popen(["a.out"], preexec_fn=pref_fun)
sub.wait()
v = sub.returncode
print "value: ", v
和我的孩子:
a.c
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Now dividing by zero\n");
fflush(stdout);
double x = 5;
x= 5/0;
printf("oh no\n");
return 0;
}
預期輸出 「中招的信號!」,但我不似乎得到它。
我觀察到同樣的問題。看起來'os.WTERMSIG(code)'只返回'code'的低7位('os.WTERMSIG(v)'=='v&0x7f')。 – rc0r