在java程序中使用linux命令(腳本)


1、需求:
     在編寫java程序時,須要調用系統提供的服務:個人需求時,在程序運行的某個點使用linux系統服務清空內存中的文件緩存。
linux提供了 /proc/sys/vm/drop_caches
工具進行內存的清理:
我前面的blog有說起http://blog.csdn.net/yumengkk/article/details/6897567
這時就須要在java中調用linux腳本或者命令
 
2、 書歸正轉:
在java程序中如何調用linux的命令?如何調用shell腳本呢?
這裏不得不提到java的process類了。
 
一、process這個類是一個抽象類,封裝了一個進程(你在調用linux的命令或者shell腳本就是爲了執行一個在linux下執行的程序,因此應該使用process類)。
 
process類提供了執行從進程輸入,執行輸出到進程,等待進程完成,檢查進程的推出狀態,以及shut down掉進程。
 
二、Runtime類,Runtime類是一個與JVM運行時環境有關的類,這個類是Singleton的。
 
這裏用到的Runtime.getRuntime()方法是取得當前JVM的運行環境,也是java中惟一能夠獲得運行環境的方法。(另外,Runtime的大部分方法都是實例方法,也就是說每次運行調用的時候都須要調用到getRuntime方法)
 
下面說說Runtime的exec()方法,這裏要注意的有一點,就是public Process exec(String []cmdArray, String []envp);這個方法中cmdArray是一個執行的命令和參數的字符串數組,數組的第一個元素是要執行的命令日後依次都是命令的參數,envp感受應該和C中的execve中的環境變量是同樣的,envp中使用的是name=value的方式。
 
下面說一下,如何使用process來調用shell腳本
 
例如,我須要在linux下實行linux命令:sh test.sh,下面就是執行test.sh命令的方法:
 
說明:
 
1   shpath:是/test/test.sh也就是咱們要執行的sh腳本的完整路徑+腳本名稱
 
2  var是一個參數,能夠有也能夠沒有,固然這個參數取決於你的sh腳本中是否使用到了這個參數,由於個人腳本中使用到了這個var參數,在linux下面執行的時候是sh test.sh  a.tar
 
這個var參數就是a.tar這個tar包的名字。
 
String command1 = 「chmod 777 」 + shpath;
    process= Runtime.getRuntime().exec(command1);
    process.waitFor();
    Stringvar= 「a.tar」;
    Stringcommand2 = 「/bin/sh 」 + shpath + 」 」 + var;
    Runtime.getRuntime().exec(command2).waitFor();
 
注意:
 
1
 
我爲何要使用chmod777命令呢?在有的機器上面,可能沒有設置權限問題。這是你在linux下面執行shell腳本須要注意的問題。沒有的話,就須要添加權限,就用chmod777,不然在執行到Runtime.getRuntime().exec的時侯會出現Permission denied錯誤。
 
2
 
waitFor()這個也是必不可缺的,等待進程執行完畢。若是你須要執行多行命令的話,把waitFor()這個加上。
摘自 yumengkk的專欄
相關文章
相關標籤/搜索