原始消息
我目前正在处理由另一个Java进程(或由调度程序调用的“启动程序”)调用的几个可执行Jars。
为此,我们使用ProcessBuilder。但是,我们需要能够在父进程和子进程(可执行的JAR)之间共享变量。
我知道可以使用环境()方法将变量传递给子进程。
我们需要的是能够共享从子进程到父进程的信息(流程结果,主要是文件)。有可能吗?如果是的话,怎么会这样?
更新两个java进程位于同一台计算机上,因此共享相同的磁盘空间。启动进程由调度程序调用,此进程不能更改。
我知道使用文件可能是最好的解决方案,但我想知道是否没有其他解决方案。
提前谢谢你的帮助。
发布于 2016-01-04 16:45:47
进程是一种黑匣子,您只能通过标准流(输入、输出、错误)或检索进程的退出代码与其对话。所有其他系统都需要一种外部通信方式。
所以你可以:
Process的方法Process作为子级和父级之间通信的一种形式。getInputStream()方法拦截子进程的输出。发布于 2016-01-04 16:48:54
您需要进程之间的双向通信()。您可以从三种选择中选择:
ServerSocket并根据自己的协议接受请求(通常必须在辅助线程上完成)。发布于 2016-01-04 17:02:05
您需要做的不是直接执行流程,而是创建一个(批处理)脚本来执行命令,然后它将变量的值写入文件。然后让ProcessBuilder执行(批处理)脚本。然后,在调用另一个进程之前,读取文件,并使用您提到的ProcessBuilder方法将变量值传递给environment()。
因此(批处理)脚本如下所示:
<your command>
echo $variable > file.txt然后使用脚本文件名作为参数执行shell:
bash batchscript.sh在windows中,它的工作原理是相同的,只是您想要执行
cmd /c batchscript.cmdhttps://stackoverflow.com/questions/34595677
复制相似问题