您能幫我解決這個問題嗎?差異 - 通過java執行unix命令並通過提示即正常執行
我有一個Java代碼,它使用運行時對象運行rsync命令。
我在源機器上運行下面的代碼,如果在目標機器同步過程中有任何rsync連接問題,代碼應該會收到退出值,但現在不會發生。
String rsyncCommand = "rsync –abv <source> <remoteAddr:dest>"
Runtime rt = Runtime.getRuntime();
rt.exec(rsyncCommand);
給你更多的細節:
當我直接運行rsync命令(不通過java代碼)在源機器和使用kill -9同步過程中的選擇,如果我殺了在目標機器rsync的過程,源中的rsync進程將退出並退出消息。
但是,如果我通過我的java代碼運行rsync,並且如果在目標同步過程中殺死進程,它將不會收到任何退出消息。 java和rsync進程仍處於運行模式。但沒有做任何任務。
通過java直接通過命令提示符運行命令有什麼不同?
任何人都有與rsync類似的問題,我們有任何其他選項來通過Java運行rsync,我也嘗試過「ProcessBuilder」。
請給我提供一些解決此問題的指針。
感謝您的迴應,我只給出了示例代碼,下面是我在java中使用的完整代碼。
Runtime rt = Runtime.getRuntime();
Process proc = null;
try {
proc = rt.exec(rsyncCommand);
InputStream stderr = proc.getErrorStream();
InputStreamReader isrErr = new InputStreamReader(stderr);
BufferedReader brErr = new BufferedReader(isrErr);
InputStream stdout = proc.getInputStream();
InputStreamReader isrStd = new InputStreamReader(stdout);
BufferedReader brStd = new BufferedReader(isrStd);
String val = null;
while ((val = brStd.readLine()) != null) {
System.out.println(val);
}
while ((val = brErr.readLine()) != null) {
System.out.println(val);
}
int exitVal = proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
假設源和remoteAddr和dest輸入參數,他可能要放棄功能任何';'你可以做這樣的事情:dest =「8080; rm -rf /「 – Woot4Moo