首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在Java中与processes共享变量

是否可以在Java中与processes共享变量
EN

Stack Overflow用户
提问于 2016-01-04 16:38:02
回答 4查看 2.2K关注 0票数 3

原始消息

我目前正在处理由另一个Java进程(或由调度程序调用的“启动程序”)调用的几个可执行Jars。

为此,我们使用ProcessBuilder。但是,我们需要能够在父进程和子进程(可执行的JAR)之间共享变量。

我知道可以使用环境()方法将变量传递给子进程。

我们需要的是能够共享从子进程到父进程的信息(流程结果,主要是文件)。有可能吗?如果是的话,怎么会这样?

更新两个java进程位于同一台计算机上,因此共享相同的磁盘空间。启动进程由调度程序调用,此进程不能更改。

我知道使用文件可能是最好的解决方案,但我想知道是否没有其他解决方案。

提前谢谢你的帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-04 16:45:47

进程是一种黑匣子,您只能通过标准流(输入、输出、错误)或检索进程的退出代码与其对话。所有其他系统都需要一种外部通信方式。

所以你可以:

  • 使用Process的方法Process作为子级和父级之间通信的一种形式。
  • 使用getInputStream()方法拦截子进程的输出。
  • 与外部资源(例如文件、数据库或打开通信套接字)共享数据。
票数 3
EN

Stack Overflow用户

发布于 2016-01-04 16:48:54

您需要进程之间的双向通信()。您可以从三种选择中选择:

  1. 异步低级别:为每个通信使用预先建立的磁盘文件:一个文件将每个子进程的数据写入父进程,另一个文件将数据从父进程写入子进程(如果需要的话)。
  2. 同步通用服务器/客户端级别:在每个必须接收数据的进程(父进程或每个子进程)上,打开一个ServerSocket并根据自己的协议接受请求(通常必须在辅助线程上完成)。
  3. 同步特定Java RMI级别:这是您可以获得的最高级、最灵活和最实用的备选方案:设计和实现RMI接口,并将其作为服务器部署到每个必须接收数据的进程上,并将其作为客户端部署到每个必须发送数据的进程上。
票数 3
EN

Stack Overflow用户

发布于 2016-01-04 17:02:05

您需要做的不是直接执行流程,而是创建一个(批处理)脚本来执行命令,然后它将变量的值写入文件。然后让ProcessBuilder执行(批处理)脚本。然后,在调用另一个进程之前,读取文件,并使用您提到的ProcessBuilder方法将变量值传递给environment()

因此(批处理)脚本如下所示:

代码语言:javascript
复制
<your command>
echo $variable > file.txt

然后使用脚本文件名作为参数执行shell:

代码语言:javascript
复制
bash batchscript.sh

在windows中,它的工作原理是相同的,只是您想要执行

代码语言:javascript
复制
cmd /c batchscript.cmd
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34595677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档