system.exit() 在 Java 中去哪里了?

Posted

技术标签:

【中文标题】system.exit() 在 Java 中去哪里了?【英文标题】:where does the system.exit() goes to in 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 $? 【参考方案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 表示程序正常退出,反之亦然。

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

【讨论】:

以上是关于system.exit() 在 Java 中去哪里了?的主要内容,如果未能解决你的问题,请参考以下文章

请问大家在java中,System.exit(-1),System.exit(-2),到-4有啥区别呢?谢谢~

Java:如何测试调用 System.exit() 的方法?

Java: System.exit() 与安全策略

Java千百问_03基础语法(015)_System.exit有什么用

仅对某些类允许 System.exit

java 多线程 System.exit; 是退出当前线程,还是结束整个虚拟机