如何在linux终端中使用Runtime.getRuntime().exec
在java中调用sh文件?如何在linux终端中使用Runtime.getRuntime()调用sh文件在java中执行
我想从java代码中调用新终端中的sh文件。如果我在终端中运行它,它将作为一个单独的进程运行,即使我的程序退出,它也不会关闭。这就是为什么我不使用ProcessBuilder
,如果使用它的程序退出,它将停止它所调用的进程。
如何在linux终端中使用Runtime.getRuntime().exec
在java中调用sh文件?如何在linux终端中使用Runtime.getRuntime()调用sh文件在java中执行
我想从java代码中调用新终端中的sh文件。如果我在终端中运行它,它将作为一个单独的进程运行,即使我的程序退出,它也不会关闭。这就是为什么我不使用ProcessBuilder
,如果使用它的程序退出,它将停止它所调用的进程。
如果您的脚本被标记为可执行文件(chmod +x script.sh
),则可以通过exec("./script.sh")
调用它。否则,您可以使用exec("sh script.sh")
直接拨打电话。
用途:
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "sh myfile.sh" });
由于ProcessBuilder
只是围绕Runtime
瘦包装,直接使用它不会做你想要的。
取而代之,您需要编写第二个脚本,它创建一个终端窗口作为后台进程并分离此进程。一般方法:
ProcessBuilder
启动外脚本nohup
切割新的X终端和Java过程之间的连接。 &
发送整个事件到后台,所以命令不会退出,直到xterm
退出。
[Runtime.getRunTime().exe的行为不像C语言的“system()”命令](http://stackoverflow.com/questions/7665185/runtime-getruntime-exec-not-behaving-like -c-language-system-command) – jtahlborn
你需要做的是运行一个终端仿真器,将脚本作为参数传递。你使用哪个终端模拟器? Xterm,gnome-terminal,konsole,...? – Joni
可能的重复[如何从Java程序启动完全独立的进程?](http://stackoverflow.com/questions/931536/how-do-i-launch-a-completely-independent-process-from-一个的Java程序) –