我使用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();
我想这不是设置到预期的进程所以服务器没有开始。如何将参数传递给最近创建的进程?或者还有其他方法可以使它工作吗?请帮帮我。任何帮助或建议都将非常感激。
答案 0 :(得分:2)
您正在做的不是传递参数,而是写入进程STDIN。
要将参数传递给流程,请使用Runtime.getRuntime().exec(String[] command)
;数组的第一个位置是命令,其余的是参数。