❶ 如何在java程序中調用linux命令或者shell腳本
java程序是提供了這個一方法,Processpro=Runtime.getRuntime().exec(cmds);
但是一般來說,盡量去用一些其他腳本(lua,shell,python)去執行一系列linux命令比較靈活, 而且耗費資源少。但是Runtime.getRuntime().exec()這種調用方式在java虛擬機中是十分消耗資源的,即使命令可以很快的執行完畢,頻繁的調用時創建進程消耗十分可觀。
java虛擬機執行這個命令的過程是,首先克隆一條和當前虛擬機擁有一樣環境變數的進程,再用這個新的進程執行外部命令,最後退出這個進程。頻繁的創建對CPU和內存的消耗很大。
下面是一個調用linux命令的例子:
publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
String[]cmds={"/bin/sh","-c","ps-ef|grepjava"};
Processpro=Runtime.getRuntime().exec(cmds);
pro.waitFor();//阻塞,直到上述命令執行完
InputStreamin=pro.getInputStream();
BufferedReaderread=newBufferedReader(newInputStreamReader(in));
Stringline=null;
while((line=read.readLine())!=null){
System.out.println(line);
}
}
}
❷ java程序里調用linux命令
Java語言以其跨平台性和簡易性而著稱,在Java裡面的lang包里(java.lang.Runtime)提供了一個允許Java程序與該程序所運
行的環境交互的介面,這就是Runtime類,在Runtime類里提供了獲取當前運行環境的介面。
其中的exec函數返回一個執行shell命令的子進程。exec函數的具體實現形式有以下幾種:
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throws
IOException
public Process exec(String command,String[] envp,File dir) throws
IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throws
IOException
public Process exec(String[] cmdarray, String[] envp,File dir)
throws IOException
我們在這里主要用到的是第一個和第四個函數,具體方法很簡單,就是在exec函數中傳遞一個代表命令的字元串。exec函數返回的是一個Process類
型的類的實例。Process類主要用來控制進程,獲取進程信息等作用。(具體信息及其用法請參看Java doc)。
1)執行簡單的命令的方法:
代碼如下:
❸ java調用shell腳本,並得到shell腳本的返回值
文件名確實不對
.sh文件才是linux下的批處理文件,它不認bat的
另外要保證.sh中調用的其他函數在當前目錄下能正常運行
❹ Java調用linux的shell腳本不成功解決得分,該如何處理
代碼是這樣寫的try {
String cmds= sh /usr/local/a.bat ;
Process child = Runtime.getRuntime().exec(cmds);} catch (IOException e) {
e.printStackTrace();}
a.bat 文件是在linux 下的一個批處理文件,裡面兩條語句,單獨執行sh /usr/local/a.bat
------解決方案--------------------------------------------------------
------解決方案--------------------------------------------------------
a.bat 是XP 下的運行程序
------解決方案--------------------------------------------------------
我覺得有以下可能:
1、/usr/local/a.bat 文件沒有被授予可執行許可權,導致無法執行;
2、java 未能識別sh 命令,最好調用java.lang.Runtime.exec(String cmd, String[] envp)
方法,將sh 的上下文路徑設置進去,估計就沒有問題了。
------解決方案--------------------------------------------------------
糾正一下2 樓的說法,實際上只要文件中的內容是linux 命令或相應批處理命令,其文件名
------解決方案--------------------------------------------------------
從代碼上分析,應該是環境變數的問題java 找不到sh 的執行路徑