相关疑难解决方法(0)

在java中,"5/0"语句不会在我的Linux机器上触发SIGFPE信号,为什么?

我写了一个非常简单的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)

c java linux signals exception-handling

6
推荐指数
3
解决办法
2119
查看次数

标签 统计

c ×1

exception-handling ×1

java ×1

linux ×1

signals ×1