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() 的方法?