2013-02-04 198 views
1

我正在使用Runtime.getRuntime().exec(cmd)来启动PostgreSQL服务器。当使用上述命令启动服务器时,我看到除了Runtime.getRuntime().exec()进程之外,正在创建新进程以启动进程。Java将参数传递给子进程

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

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

+0

so process是Runtime.getRuntime()。exec(cmd)返回的对象? –

+0

当您创建进程时,可能会有命令行参数构建到字符串的末尾。你将如何编写一个'单行'从控制台提示符启动服务器? – DomV

回答

2

你在做什么不是传递参数,而是写入进程STDIN。

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

+0

Runtime.getRuntime()。exec(cmd)中的字符串“cmd”是一个字符串数组。 String cmd [] = {“/ usr/bin/pg_ctl”,“-D”,“/ u/john/postgre_test/data /”,“restart”,“-w”}; – Mojoy

+0

你会在shell中使用的命令行是什么?这将有助于澄清这个问题。 – SJuan76

+0

pg_ctl -D〜/ postgre_test/data/restart -w - 这是我用来在命令行中执行的命令。 – Mojoy