gpt4 book ai didi

java - 如何从 Java 中运行的进程中获取 bash 命令退出代码?

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:49 25 4
gpt4 key购买 nike

我有一个程序是:

import java.io.*;
import java.util.*;

public class ExecBashCommand {
public static void main(String args[]) throws IOException {

if (args.length <= 0) {
System.err.println("Need command to run");
System.exit(-1);
}

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("./nv0914 < nv0914.challenge");
Process process1 = runtime.exec("echo ${?}");
InputStream is = process1.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;

//System.out.printf("Output of running %s is:", Arrays.toString(args));

while ((line = br.readLine()) != null) {
System.out.println(line);
}

}
}

注意:nv0914 是一个 bash 可执行文件,nv0914.challenge 是一个文本文件。当我在终端中运行任何正常命令时,紧接着如果我使用 echo ${?} 检查退出代码。现在我想通过使用一个程序来做同样的事情,但该程序只是给出输出 ${?}。请帮帮我!

最佳答案

Process.waitFor() 返回一个 int 这是返回退出代码的地方。如果您启动一个不相关的程序,将不会有先前的退出代码,这就是它不返回任何有用信息的原因。

您不能可靠地使用 exitValue(),因为您可以在程序完成之前调用它。你应该只在调用 waitFor() 之后调用它(它会给出与 waitFor() 相同的退出代码)

来自 exitValue 的 Javadoc

Throws: IllegalThreadStateException - if the subprocess represented by this Process object has not yet terminated.

关于java - 如何从 Java 中运行的进程中获取 bash 命令退出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com