我有以下java代码:
public class Example{
public static void main(String args[]){
//Done something here
// Start process A
somefunction();
}
public static void somefunction(){
// Done some implementation
System.out.println("Completed");
}
}
我有一个运行A(一个linux脚本),运行大约20分钟。此过程不会以任何方式影响我当前的程序。
以下我想做的事: 1.触发运行该过程。 我不想等待那个过程完成。 3.触发过程后立即启动somefunction()。
我只是想触发/运行进程A并且不关心它在完成时是否给出了任何输出。
我查看了以下链接: Run a external application in java but don't wait for it to finish
但无法成功运行该过程。
我尝试运行一些较短的命令,例如:“sleep 10; mv / home / file / home / file1;”,用于上述链接中的“name”参数。 (命令描述:这个命令只是睡了10秒,重命名文件到file1。我没有发生。(仅供参考,我使用的是RedHat)。)
代码运行成功但我在10秒后看不到文件的任何重命名。
我该怎么办? 一些示例代码将非常有用。
感谢。
答案 0 :(得分:1)
我认为解决方案可能就像这样简单:
public class Example{
public static void main(String args[]){
String[] command = new String[] {
"/bin/sh", "-c", "sleep 10; mv /home/file /home/file1"
};
Process process = new ProcessBuilder(command).start();
somefunction();
process.waitFor();
}
...或Windows上使用“cmd”的等效文件。
简而言之,我怀疑你真正的问题是你将shell命令语法直接提供给不理解它的ProcessBuilder
!
答案 1 :(得分:0)
您需要在进程完成之前停止应用程序退出,您可以在调用somefunction()之前启动该进程,但是当somefunction()完成时,请等到进程完成后再退出。 E.g。
public class Example{
public static void main(String args[]){
//Done something here
// Start process A
Process process = new ProcessBuilder(name).start();
somefunction();
process.waitFor(); //stop Java from exiting before the process finishes
}
public static void somefunction(){
// Done some implementation
System.out.println("Completed");
}
}