无法在Java中运行长期存在的进程

时间:2015-09-22 10:43:32

标签: java multithreading

我有以下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秒后看不到文件的任何重命名。

我该怎么办? 一些示例代码将非常有用。

感谢。

2 个答案:

答案 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");
    }
}