我写了一个非常简单的c程序:
#include<stdio.h>
int main(){
int a=2;
int b=0;
printf("%d\n", a/b);
}
Run Code Online (Sandbox Code Playgroud)
并使用strace运行它:strace ./a.out并获得以下输出(仅粘贴尾部)
... ...
mprotect(0x600000, 4096, PROT_READ) = 0
mprotect(0x7f04c7fb8000, 4096, PROT_READ) = 0
munmap(0x7f04c7f96000, 127640) = 0
--- SIGFPE (Floating point exception) @ 0 (0) ---
+++ killed by SIGFPE +++
Floating point exception
Run Code Online (Sandbox Code Playgroud)
输出符合我的预期,因为它被SIGFPE信号杀死.
但是,用Java编写的相同程序,没有得到SIGFPE信号,有没有人知道java进程如何"除以零"异常?
public class Main {
public static void main(String[] args) {
int a = 2;
int b = 0;
System.out.println(a / b);
}
}
Run Code Online (Sandbox Code Playgroud)
strace java -Xcomp Main
... ...
mprotect(0xf6949000, 8171520, PROT_READ|PROT_WRITE) …Run Code Online (Sandbox Code Playgroud)