gpt4 book ai didi

java - Process.waitFor() 在 mysql 备份期间永远等待

转载 作者:行者123 更新时间:2023-11-29 05:37:15 25 4
gpt4 key购买 nike

我正在尝试使用 Process.waitFor() 等待 mysqldump 完成其备份过程。这是我的代码。

    ///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();
}

最佳答案

您需要使用子流程的输出流。这article详细说明了成功使用 Process 所需要做的一切。 (此外,这可能已经在 stackoverflow 上得到了多次回答)。

关于java - Process.waitFor() 在 mysql 备份期间永远等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com