Java将参数传递给子进程

时间:2013-02-04 14:15:34

标签: java process runtime runtime.exec

我使用Runtime.getRuntime().exec(cmd)启动PostgreSQL服务器。使用上面的命令启动服务器时,我发现除了Runtime.getRuntime().exec()进程之外,还创建了一个新进程来启动该进程。

john 14330  0.0  0.0 128244  2568 pts/88   S+   19:35   0:00 pg_ctl -D /u/john/postgre_test/data/ start -w
john 14334  9.5  0.0 124592  3736 pts/88   S+   19:35   0:00 /usr/bin/postgres -D /u/john/postgre_test/data

如您所见,首先是因为exec()方法而创建的,并且还创建了新的第二个。现在,因为服务器需要必须传递的SSL私钥密码。如果我使用

传递它
    PrintStream ps = new PrintStream(process.getOutputStream());
    ps.println(keyPassword);
    ps.flush();

我想这不是设置到预期的进程所以服务器没有开始。如何将参数传递给最近创建的进程?或者还有其他方法可以使它工作吗?请帮帮我。任何帮助或建议都将非常感激。

1 个答案:

答案 0 :(得分:2)

您正在做的不是传递参数,而是写入进程STDIN。

要将参数传递给流程,请使用Runtime.getRuntime().exec(String[] command);数组的第一个位置是命令,其余的是参数。