java执行linux命令返回结果问题
public static Map<String,String> execShellCommandMap(String command) {
Map<String,String> retmap = new HashMap<String,String>();
if (command == null || command.equals("")){
return null;
}
Process p = null;
Runtime rt = Runtime.getRuntime();
final StringBuffer buf1 = new StringBuffer("");
final StringBuffer buf2 = new StringBuffer("");
Integer retValue = null;
try {
p = rt.exec(command);
// 获取进程的标准输入流
final InputStream is1 = p.getInputStream();
// 获取进城的错误流
final InputStream is2 = p.getErrorStream();
// 启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流
new Thread() {
public void run() {
BufferedReader br1 = new BufferedReader(new InputStreamReader(is1));
try {
String line1 = null;
while ((line1 = br1.readLine()) != null) {
buf1.append(line1);
buf1.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}.start();
new Thread() {
public void run() {
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
try {
String line2 = null;
while ((line2 = br2.readLine()) != null) {
buf2.append(line2);
buf2.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}.start();
p.waitFor();
retValue = p.exitValue();
// p.destroy();
} catch (Exception e) {
e.printStackTrace();
// try {
// p.getErrorStream().close();
// p.getInputStream().close();
// p.getOutputStream().close();
// } catch (Exception ee) {
// }
}
retmap.put("normaloutput", buf1.toString());
retmap.put("erroroutput", buf2.toString());
retmap.put("retvalue", retValue != null ? retValue.toString():"");
retmap.put("message", buf1.toString()+buf2.toString());
return retmap;
}
问题1:
Map<String,String> map = ShellUtil.execShellCommandMap(HotCust.CHECKHA_EXIST_SCRIPT);
这样调用后的输出结果是不是相当于linux命令行执行命令后 在执行一次 echo $? 的返回结果!
问题2:
如果问题1的答案是 :是
那么为什么我java调用永远返回1:
[root@server11 ~]# chkconfig --list | grep heartbeat
heartbeat 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@server11 ~]# echo $?
0
[root@server11 ~]#
问题3:
最后跪求如何能正确或者linux命令的返回结果!!
在线等。。。。