从Java执行shell命令

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

 (gdb)bt
 __kernel_vsyscall()中的#0 0xb773d422
 pthread_join中的#1 0xb7709b5d(threadid = 3063909232,thread_return = 0xbf9cb678):pthread_join.c:89
 ContinueInNewThread()中的#2 0x0804dd78
 #3 0x080497f6 in 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();