前提:html
java代码是在windows下面写的,要打包放到linux下面运行,而且执行某个脚本。java
java代码:linux
try {
// 起做用的代码其实就下面这一行, 参数是linux中要执行的代码 Runtime.getRuntime().exec("sh generator.sh").waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }
转自:https://www.cnblogs.com/tohxyblog/p/6501396.htmlwindows
java在企业级项目开发中,不管是强制性的功能须要,仍是为了简便java的实现,须要调用服务器命令脚原本执行。在java中,RunTime.getRuntime().exec()就实现了这个功能。服务器
用法:spa
// 在单独的进程中执行指定的字符串命令
public Process exec(String command)
// 在单独的进程中执行指定命令和变量
public Process exec(String[] cmdArray)
// 在指定环境的独立进程中执行指定命令和变量
public Process exec(String command,String[] envp)
// 在指定环境的独立进程中执行指定命令和变量
public Process exec(String[] cmdArray,String[] envp)
// 在有指定的环境和工做目录的独立进程中执行指定的字符串命令
public Process exec(String command,String[] encp,File dir)
// 在指定环境和工做目录的独立进程中执行指定的命令和变量
public Process exec(String[] cmdarray,String[] envp,File dir)
举例:线程
一、code
// 在windows下至关于直接调用 /开始/搜索程序和文件的指令,好比
RunTime.getRuntime().exec(String command); //打开windows下记事本
二、htm
public Process exec(String[] cmdArray);
// Linux下
Runtime.getRuntime().exec(new String[]{/bin/sh","-c"});
// Windows下
Runtime.getRuntime().exec(new String[]{"cmd","/c",cmds});
深刻:对象
Process的几种方法
一、destroy():杀掉子进程
二、exitValue():返回子进程的出口值,值0表示正常终止
三、getErrorStream():获取子进程的错误流
四、getInputStream():获取子进程的输入流
五、getOutputStream():获取子进程的输出流
六、waitFor():致使当前线程等待,若有必要,一直要等到由该Process对象表示的进程已经终止。若是已终止该子进程,此方法当即返回。若是没有终止该子进程,调用的线程将被阻塞,知道退出子进程,根据管理,0表示正常终止。
注意:在Java中,调用runtime线程执行脚本是很是消耗资源的,因此切记不要频繁使用!
在调用runtime去执行脚本的时候,其实就是JVM开了一个子线程去调用JVM所在系统的命令,其中开了三个通道:输入流、输出流、错误流,其中输出流就是子线程走调用的通道。
你们都知道,waitFor是等待子线程执行命令结束后才访问,可是在runtime中,打开程序的命令若是不关闭,就不算子线程结束,好比以下代码。
private static Process p = null; p = Runtime.getRuntime().exec("notepad.exe"); p.waitFor(); System.out.println("---------------我被执行了");
以上代码中,打开windows中记事本,若是咱们不手动关闭记事本,那么输出语句就不会执行,这点事须要理解的。