2013-07-25 103 views
1

如何在linux终端中使用Runtime.getRuntime().exec在java中调用sh文件?如何在linux终端中使用Runtime.getRuntime()调用sh文件在java中执行

我想从java代码中调用新终端中的sh文件。如果我在终端中运行它,它将作为一个单独的进程运行,即使我的程序退出,它也不会关闭。这就是为什么我不使用ProcessBuilder,如果使用它的程序退出,它将停止它所调用的进程。

+0

[Runtime.getRunTime().exe的行为不像C语言的“system()”命令](http://stackoverflow.com/questions/7665185/runtime-getruntime-exec-not-behaving-like -c-language-system-command) – jtahlborn

+0

你需要做的是运行一个终端仿真器,将脚本作为参数传递。你使用哪个终端模拟器? Xterm,gnome-terminal,konsole,...? – Joni

+1

可能的重复[如何从Java程序启动完全独立的进程?](http://stackoverflow.com/questions/931536/how-do-i-launch-a-completely-independent-process-from-一个的Java程序) –

回答

0

如果您的脚本被标记为可执行文件(chmod +x script.sh),则可以通过exec("./script.sh")调用它。否则,您可以使用exec("sh script.sh")直接拨打电话。

0

用途:

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "sh myfile.sh" }); 
0

由于ProcessBuilder只是围绕Runtime瘦包装,直接使用它不会做你想要的。

取而代之,您需要编写第二个脚本,它创建一个终端窗口作为后台进程并分离此进程。一般方法:

  1. ProcessBuilder启动外脚本
  2. 外部脚本使用Linux命令nohup(1)创建脚本内分离的进程。例如:`的nohup的xterm -e /斌/庆典 “script.sh &”

nohup切割新的X终端和Java过程之间的连接。 &发送整个事件到后台,所以命令不会退出,直到xterm退出。

相关问题