当前位置: 首页 > 面试题库 >

从Java执行Shell命令

谭飞掣
2023-03-14
问题内容

我正在尝试从GNU /
Linux平台上的Java应用程序执行shell命令。问题是,尽管它可以从bash成功运行,但调用另一个Java应用程序的脚本永远不会结束。我试图调试它:

(gdb)bt
__kernel_vsyscall中的#0 0xb773d422()
pthread_join中的#1 0xb7709b5d(threadid = 3063909232,thread_return = 0xbf9cb678)在pthread_join.c:89
#2 0x0804dd78在ContinueInNewThread()中
#3 0x080497f6在main()中

我尝试使用:ProcessBuilder(); 和Runtime.getRuntime()。exec(cmd);

看起来它正在等待完成。有任何想法吗?

谢谢,Laurențiu


问题答案:

您是否正在处理标准输入和标准输出?从javadocs:

由于某些本机平台仅为标准输入和输出流提供了有限的缓冲区大小,因此未能及时写入子进程的输入流或读取子进程的输出流可能导致子进程阻塞,甚至死锁。

Process cmdProc = Runtime.getRuntime().exec(command);


BufferedReader stdoutReader = new BufferedReader(
         new InputStreamReader(cmdProc.getInputStream()));
String line;
while ((line = stdoutReader.readLine()) != null) {
   // process procs standard output here
}

BufferedReader stderrReader = new BufferedReader(
         new InputStreamReader(cmdProc.getErrorStream()));
while ((line = stderrReader.readLine()) != null) {
   // process procs standard error here
}

int retValue = cmdProc.exitValue();


 类似资料:
  • 我有一个案例,我想问我可以解决与Spring壳。我有一个Main.jar应用程序,它有几个部署在Wildly服务器上的Spring任务。在我的例子中,我不能停止或重新部署main.jar,因为必须不停地提供服务。

  • 问题内容: 我正在尝试在我编写并按下的应用程序中从应用程序仿真器终端(您可以在Google Play中找到它)执行此命令enter,因此请编写: 然后再次按,并使用的新功能开始录制屏幕。 因此,我尝试使用以下命令从Java执行相同的代码: 但是不起作用,因为未创建文件。显然,我在装有android kitkat的有根设备上运行。问题出在哪里?我该如何解决?因为从终端仿真器工作并且在Java中不行?

  • 我正在尝试从jenkinsfile执行一组命令。问题是,当我尝试将stdout的值分配给变量时,它不起作用。我尝试了双引号和单引号的不同组合,但到目前为止没有运气。 在这里,我使用最新版本的jenkinsfile以及旧版本执行脚本。将shell命令放入 """ """ 不允许创建新变量,并给出client_name命令不存在的错误。 我想将命令p4客户端-e$client_name的标准输出分配给

  • 我正试图从应用程序仿真器终端(您可以在google play中找到它)执行这个命令,在这个应用程序中我编写并按Enter,所以写:

  • 我试图在我的网页中使用PHP从远程机器中的shell获得结果。我用了这些台词: 我试图得到结果在我的网页在windows机器和libssh2已经包含在easyphp. 有什么想法吗?

  • 问题内容: 我在一个应用程序上工作,但有一个关于从Java应用程序运行shell命令的问题。这是代码: 但是当我尝试执行命令时: myapp读取 为两个单独的参数。但是我只想读取一个参数。 当我直接从终端运行此命令时,它执行成功。 我试过,, 但对我没有工作。我如何才能将此参数作为一个参数读取。 问题答案: 我记得exec方法的重载分别为参数提供了一个参数。你需要用那个 对。就这个 只需将命令行和