Java将参数传递给子进程

Java将参数传递给子进程,java,process,runtime,runtime.exec,Java,Process,Runtime,Runtime.exec,我正在使用Runtime.getRuntime().exec(cmd)启动PostgreSQL服务器。当使用上述命令启动服务器时,我看到正在创建一个新进程来启动进程,而不是Runtime.getRuntime().exec()process 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 1

我正在使用
Runtime.getRuntime().exec(cmd)
启动PostgreSQL服务器。当使用上述命令启动服务器时,我看到正在创建一个新进程来启动进程,而不是
Runtime.getRuntime().exec()
process

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

我猜它没有设置为预期进程,因此服务器没有启动。如何将参数传递给最近创建的进程?或者是否有其他方法使其工作?

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


要将参数传递给流程,请使用;数组的第一个位置是命令,其余位置是参数。

因此进程是Runtime.getRuntime().exec(cmd)返回的对象?创建进程时,可能会在字符串末尾生成命令行参数。如何编写从控制台提示符启动服务器的“一行程序”?Runtime.getRuntime().exec(cmd)中的字符串“cmd”是一个字符串数组。字符串cmd[]={/usr/bin/pg_ctl“,“-D”,“/u/john/postgre_test/data/,“restart”,“-w”};您将在shell中使用什么命令行?这将有助于澄清问题。pg_ctl-D~/postgre_test/data/restart-w-这是我在命令行中执行的命令。