【问题标题】:How to block child processes in java and restarting them如何在java中阻止子进程并重新启动它们
【发布时间】:2011-01-08 16:36:25
【问题描述】:

我有两个问题:

我需要通过我的主进程停止子进程,然后在我的主进程发生某些事情后重新启动它们。我可以这样做吗?

非常感谢。

【问题讨论】:

  • 你应该把你的问题分成两个主题。
  • 为了鼓励 OP 做正确的事,请不要回答这个问题的第二部分。
  • 致 OP - 请编辑您的问题以摆脱逻辑上不相关的第二部分...或请某人为您做。另外,如果您将其作为新问题提出,请尝试提供更多详细信息和示例。我(对于一个)无法弄清楚你在问什么。

标签: java process operating-system


【解决方案1】:

好吧,那是很久以前的事了,我真的很困惑,可能忘了寻找答案。谢谢,但实际上有一种方法可以处理第一部分,答案是 Java 远程方法调用或 simpli RMI: http://en.wikipedia.org/wiki/Java_remote_method_invocation

我将删除我的问题的第二部分,因为我根本不记得我在做什么!

【讨论】:

    【解决方案2】:

    问题第一部分的答案取决于您所说的“进程”是Process 还是Thread。但在这两种情况下,都没有好的方法可以让不合作的进程“停止”。

    • Process 的情况下,操作系统可能会提供对暂停进程的支持,但Java 进程API 不提供此功能。因此,您需要借助非便携式方式(例如 JNI/JNA)来实现这一点。

    • Thread 的情况下,有称为suspendresume 的方法,但不应使用它们,因为它们根本不安全。 Javadoc 说得非常清楚!

    因此,如果您实施暂停/恢复机制,则需要您的进程参与/合作。在Thread 的情况下,您可以使用低级同步原语或使用类似CyclicBarrier 类的东西来实现挂起/恢复机制。

    【讨论】:

      【解决方案3】:

      对于您的第一部分,java.util.concurrent.locks 中的一些课程可能会对您有所帮助。看看LockSupport

      【讨论】:

        【解决方案4】:

        我不完全确定您在上述帖子中的意思 - 我怀疑它们是不同的问题,第二个问题与 Glassfish 有关,我可能无法回答。

        但是,首先我可以,如果您指的是线程而不是进程 - Java 有一个等待/通知方法对,组合使用它允许您启动 n 个子线程并等待它们全部完成,然后再继续主进程.我认为这是您所需要的,而不是从主进程中停止子进程 - 在并发编程中,永远不应该这样做,因为您无法保证您在子进程中的位置。看看:http://www.javamex.com/tutorials/synchronization_wait_notify_4.shtml

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-31
          • 1970-01-01
          • 2017-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-25
          • 1970-01-01
          相关资源
          最近更新 更多