首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中运行进程

问在Java中运行进程
EN

Stack Overflow用户
提问于 2018-02-07 11:21:23
回答 2查看 1.3K关注 0票数 1

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

代码语言:javascript
复制
       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应用程序之后-备份文件有其正常大小。

我不明白问题出在哪里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-13 14:00:16

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

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

我希望我能解释清楚

我试着预定义文件的路径。但也是同样的错误。我还使用了ProcessBuilder整数。

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

这是详细输出的选项。下面是我的最后一个方法,它运行良好:

代码语言:javascript
复制
                Process process = new ProcessBuilder("pg_dump", "-a", "-d", database, "-h", server, "-p", port, "-U", user, "-f", file.getPath()).start();
                process.waitFor();
票数 1
EN

Stack Overflow用户

发布于 2018-02-07 11:57:20

我猜想这可能与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"

它是怎么表现的?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48662541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档