从Java执行Shell命令

我正在尝试从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();

以上是 从Java执行Shell命令 的全部内容, 来源链接: utcz.com/qa/426299.html

回到顶部