2016-03-07 63 views
1

我刚刚为Java Process Builder进行了简单的测试代码。 有4个例子,除了最后一个以外,一切都很顺利。 这里是我的代码Java简单进程生成器问题

public class bashProcessor { 

public static void main(String args[]) { 
try { 
    ProcessBuilder pb; 

    pb = new ProcessBuilder("/bin/bash", "-c", "touch Jin_1.sh"); 
    pb.start(); 

    pb = new ProcessBuilder("/bin/bash", "-c", "mkdir Jin_2"); 
    pb.start(); 

    pb = new ProcessBuilder("/bin/bash", "-c", "bash /home/Jin/test.sh"); 
    pb.start(); 

    //below is not working 
    pb = new ProcessBuilder("/bin/bash", "-c", 
     "bash /home/solr-tomcat/bin/shutdown.sh warm4 solr-instances"); 

    pb.start(); 

    System.out.println("pb job is done now"); 

    Thread.sleep(3000); 

} catch (Exception e) { 
    System.out.println(e.getMessage()); 
} 
} 
} 

当我键入最后一个例子(bash中的/ home/Solr的...)通过手工打字。它工作没有任何错误。我需要你的帮助。如果你有任何想法 请让我知道这将是很大的帮助。

+0

你试过' “/斌/庆典”, “-c”, “庆典”,“/家/solr-tomcat/bin/shutdown.sh“,”warm4“,”solr-instances“'? – MadProgrammer

+0

谢谢你的建议。我刚刚试过这个,就像你说的“pb = new ProcessBuilder(”/ bin/bash“,”-c“,”bash“,”/home/solr-tomcat/bin/shutdown.sh“,”warm4“,”solr -instances “);”但它不工作 –

+1

你是否有任何理由从bash内部调用bash?也许只是将它简化为'(“/home/solr-tomcat/bin/shutdown.sh warm4 solr-instances”);'或者在脚本中包含完整的bash路径'(“/ bin/bash”,“ - ” c“, ”/ bin/bash /home/solr-tomcat/bin/shutdown.sh warm4 solr-instances“) –

回答

0

正如@ug_指出的那样,尝试从命令中删除bash,然后执行您的代码。以下代码可以很好地处理多个命令。

cmd.java

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
public class cmd { 
    public static void main(String[] args) { 
     try { 
       String[] command = new String[3]; 
       command[0] = "/bin/bash"; 
       command[1] = "-c"; 
       command[2] = "javac -verbose HelloWorld.java"; 


       Process p = Runtime.getRuntime().exec(command); 
       BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
       BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
       String Error; 

       while ((Error = stdError.readLine()) != null) { 
        System.out.println(Error); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      }  
    } 
} 

HelloWorld.java

public class HelloWorld { 
    public static void main(String[] args) { 
     System.out.println("Hello World"); 
    } 
}