【问题标题】:where does the system.exit() goes to in Java?system.exit() 在 Java 中去哪里了?
【发布时间】:2014-02-02 00:49:58
【问题描述】:

似乎this 是从您的main 获得return status code 的一种方式。 但我想知道int 去哪里了?我在eclipse上试过了,但在控制台上看不到。 我如何获得status code

public static void main(String[] args){
         int status = 123;
          System.exit(status);
     }

【问题讨论】:

  • 如果你在 Linux 上,试试echo $?

标签: java main exit system.exit


【解决方案1】:

退出代码通常会返回给正在运行您的应用程序的脚本或程序,例如,我编写了以下简单的 java 程序

class Test {

    public static void main(String[] args) {
        System.exit(123);
    }

}

然后我使用javac Test.java 编译它 接下来我编写了一个简单的 bash 脚本,它会运行 java Test,然后像这样打印出退出代码

#!/bin/bash

java Test
echo $?

当我运行 bash 脚本时,数字 123 会打印到屏幕上,因为 $? 是最后一个运行命令的退出代码。

【讨论】:

    【解决方案2】:

    该值称为exit status

    计算机编程中进程的退出状态或返回码是 从子进程(或被调用者)传递给父进程的一小部分 进程(或调用者)完成执行特定的 程序或委派的任务。

    这里有一个小的 Java 测试来演示它

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    
    public class Foo {
        public static void main(String[] args) throws Exception {
            if (args.length != 0)
                System.exit(Integer.parseInt(args[0]));
            ProcessBuilder builder = new ProcessBuilder(Arrays.asList("java", "Foo", "42"));
            Process process = builder.start();
            System.out.println(process .waitFor());     
        }
    }
    

    编译并运行这个程序,不带任何参数。它会打印

    42
    

    这个java程序启动一个子进程。当该进程结束时,它将在System.exit(?) 中传递给它的值返回给它的父进程,然后打印出来。

    【讨论】:

    • args[0] 如何得到42
    • @user1988876 因为我使用ProcessBuilder 构建的java 进程被赋予了参数42,它成为JVM 传递给@987654332 的String[] 中索引0 处的参数@方法。
    • 三个进程是否需要list(java,foo,42)的每个参数?
    • Integer.parseInt("foo") 会抛出 numberFormatException..?
    • @user1988876 不,here's the javadoc。基本上它将执行以下命令:java Foo 42.
    【解决方案3】:

    退出代码(状态)在 JVM 终止时返回给操作系统,因此如果您通过终端/命令行运行它,您会看到程序是否异常终止。

    【讨论】:

      【解决方案4】:
      C:\JavaTools>javac SystemExit.java
      
      C:\JavaTools>java SystemExit
      
      C:\JavaTools>echo %ERRORLEVEL%
      123
      

      【讨论】:

        【解决方案5】:

        退出代码将返回给操作系统。 Return 0 表示程序正常退出,反之亦然。

        返回不同的错误代码意味着不同的原因。这可以帮助操作系统(或父进程)找出程序出了什么问题。

        【讨论】: