【问题标题】:run Process in Java在 Java 中运行进程
【发布时间】:2018-02-07 11:21:23
【问题描述】:

在我的 Java 应用程序中,我启动了一个 postgres 进程来备份我的数据库。

       Thread thread = new Thread(() ->{
       Process p;
       try{
           p = Runtime.getRuntime().exec("cmd /c pg_dump -v -a -d "+database+" -h "+server+" -p "+port+" -U "+user+" -n public > " + file.getPath());
           p.waitFor();
       }catch(Exception e){
           return false;
       }
       });

这可行,备份文件已创建。但是我的应用程序运行时文件大小为 0KB。在我关闭 Java 应用程序后 - 备份文件具有正常大小。

我不明白问题出在哪里

【问题讨论】:

  • 请详细说明您的问题

标签: java process


【解决方案1】:

我很抱歉,但我很难正确解释这一点。

在我的应用程序中,我尝试使用 PostgreSQL 中的 pg_dump 创建数据库转储文件。如果我启动转储过程,那么文件将在我关闭整个应用程序后创建。

我希望我解释它可以理解

我试图预定义文件的路径。但这是同样的错误。我还使用了 ProcessBuilder intead。

问题是我在 pg_dump 命令中使用了 -v 选项。如果没有此选项,它可以正常工作,并且将立即创建文件。

这是详细输出的选项。这是我的最终方法,效果很好:

                Process process = new ProcessBuilder("pg_dump", "-a", "-d", database, "-h", server, "-p", port, "-U", user, "-f", file.getPath()).start();
                process.waitFor();

【讨论】:

    【解决方案2】:

    我猜这可能与file 以及您处理它的方式有关(我的猜测是基于您代码中的file.getPath())。

    但是,你还没有发布整个代码......所以,我唯一能做的就是猜测。

    尝试使用预定义文件名的相同代码(比如说c:\\myfilename.dmp)。

    例如 p = Runtime.getRuntime().exec("cmd /c pg_dump -v -a -d "+database+" -h "+server+" -p "+port+" -U "+user+" -n public > c:\\myfilename.dmp"

    它的行为如何?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 2010-09-25
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多