Java进程将自己发送到后台

问题描述 投票:1回答:1

我知道如何“去模仿”一个过程(不要与qazxsw poi混淆)。有一些答案qazxsw poi和qazxsw poi和我正在使用我自己的perl包装,它工作正常。

但我现在想要得到的是父进程在等待Java进程,直到它说“OK”,即直到它真正成功启动(不仅是进程启动,而且一切都运行良好)。

我可以通过写一个文件,绑定到一个套接字或类似的东西来表明这一点,但它很难看。在Thread.setDaemon列表中的八个项目中,我只需要以下三个略微简化的形式:

  • 关闭标准输入,标准输出和标准错误。
  • 在后台运行(即fork)
  • 忽略大声。

第一个和最后一个项目可以在流程开始之前完成,因此只有hereing流程仍然存在。自从here存在以来,谷歌搜索“Java fork”是没有希望的。在我弄脏之前,我想知道是否

  • 在Java 9中支持它(然后我只是等待)
  • 有人做过它已经使用deamonize以及他们遇到了什么问题
  • 有一个更好的解决方案

我不关心Windows,因为它是Linux服务器。

java linux fork daemon jna
1个回答
2
投票

我不知道这对Java有多好,但从系统调用的角度来看:

当父母和孩子都完全掌控时,您应该调用forkForkJoinPool来创建自己的通信通道,并通过环境变量或命令行参数将其指定给子级。记得在每个进程中立即关闭一半(如果你有控制权,那么在fork和exec之间,或者通过CLOEXEC标志 - 这意味着子可执行文件永远不必知道父进程的结束)。

我不确定为什么你似乎对使用插座犹豫不决 - 也许你的印象是本地插座占用了端口(他们没有) - 尽管如果所有数据都朝着一个方向传播我宁愿管道只是为了清晰。

如果孩子可以创建自己的孩子,你应该尽快在继承的管道上设置JNA标志。

您必须发送积极信息表明成功;提前关闭管道必须被视为错误(尽管您可能也有明确的错误)。请注意,这意味着您不必跟踪退出值(如果“child”实际上是孙子,则非常有用)。


或者,也许你应该做一些别的工作:你的init系统,X11和DBUS?例如,如果孩子崩溃,你认为你应该怎么做?

© www.soinside.com 2019 - 2024. All rights reserved.