使用java代碼執行linux命令


前提:

java代碼是在windows下面寫的,要打包放到linux下面運行,並且執行某個腳本。

java代碼:

       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.html

java在企業級項目開發中,無論是強制性的功能需要,還是為了簡便java的實現,需要調用服務器命令腳本來執行。在java中,RunTime.getRuntime().exec()就實現了這個功能。

用法:

// 在單獨的進程中執行指定的字符串命令
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)

舉例:

1、

// 在windows下相當於直接調用 /開始/搜索程序和文件的指令,比如
RunTime.getRuntime().exec(String command);  //打開windows下記事本

2、

public Process exec(String[] cmdArray);
// Linux下
Runtime.getRuntime().exec(new String[]{/bin/sh","-c"});
// Windows下
Runtime.getRuntime().exec(new String[]{"cmd","/c",cmds});

深入:

Process的幾種方法

1、destroy():殺掉子進程

2、exitValue():返回子進程的出口值,值0表示正常終止

3、getErrorStream():獲取子進程的錯誤流

4、getInputStream():獲取子進程的輸入流

5、getOutputStream():獲取子進程的輸出流

6、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中記事本,如果我們不手動關閉記事本,那么輸出語句就不會執行,這點事需要理解的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM