我想使用Process.waitFor()等到mysqldump完成其備份過程。這是我的代碼。Process.waitFor()在mysql備份期間永遠等待
///i use this mysql command, its working fine
String dump = "bkprefs/mysqldump "
+ "--host=localhost "
+ "--port=3306 "
+ "--user=root "
+ "--password= "
+ "--add-drop-table "
+ "--add-drop-database "
+ "--complete-insert "
+ "--extended-insert "
+ "test";
//execute the command
Process run = null;
try {
run = Runtime.getRuntime().exec(dump);
int stat = run.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
問題是,run.waitfor()
掛起。它似乎一直在等待一些不會發生的事情。
當我將行int stat = run.waitFor()
替換爲Thread.sleep(5)
時,備份工作正常。但我不能堅持這一點,因爲備份時間會根據數據庫的大小而有所不同,因此使用Thread.sleep
等待備份過程完成並不安全。
請幫幫我。回覆非常感謝。
編輯:
我使用下面的代碼消耗其輸入流。
InputStream in = run.getInputStream();
FileWriter fstream = null;
try {
fstream = new FileWriter("haha.sql");
} catch (IOException ex) {
ex.printStackTrace();
}
BufferedWriter out = new BufferedWriter(fstream);
int nextChar;
StringBuffer sb = new StringBuffer();
try {
while ((nextChar = in.read()) != -1) {
out.write((char) nextChar);
//sb.append((char) nextChar);
}
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
我剛剛發佈的代碼後面的代碼完全符合您的說法 – Jemp 2012-03-12 14:57:59
@Bnrdo - 您是否在使用_separate Thread_來處理這些流(詳見該文章)? – jtahlborn 2012-03-12 17:25:00
不,用於處理這些流的代碼實際上遵循備份代碼。 – Jemp 2012-03-13 13:12:12