2013-10-02 94 views
0

我正在寻找能够在Java的这样的解决方案:Java进程暂停和继续

  • 生成一个进程。
  • 挂起它(就像kill -STOP在Linux中一样)。
  • 继续暂停的进程(如在Linux中kill -CONT)。
  • 在运行时读取/写入其标准输入/输出管道。
  • 工作(至少)Linux和Windows。

据我所知,Java标准版只实现第一个和第四个,但不是第二个也不是第三个。

我该怎么办?

+2

你不太清楚。你可以使用['wait' /'notify'](http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html)。你可以使用['java.util.concurrent'](http://shazsterblog.blogspot.co.uk/2011/12/comparison-of-countdownlatch.html)包。 –

+0

另外,您可以在java中执行shell命令,通过它可以轻松实现2和3。也许还有其他一些方法。 – Ragavan

+0

该解决方案适用于线程。它也适用于流程吗? – lilezek

回答

1

没有办法从Java“直接”做。

您将需要为Windows/Linux做一些特定的事情,在每种情况下执行外部程序或调用本机代码。

在Linux上,您可以按照您的建议使用kill

在Windows上,您可以拨打SuspendThread(),或者也可以启动SysInternals工具'PsSuspend'。有一些信息,可以帮助你在这里:

How to pause/resume any external process under Windows?

How to suspend/resume a process in Windows?

如果你想从Java调用本地代码,JNIWrapper可以帮助你。另外,如果你需要产生进程的PID,那么你可能需要通过本地代码启动,因为Java不会给你它们的PID。

+0

因此,我不能像Boris Spider所说的那样使用wait/notify吗? – lilezek

+0

不,wait/notify用于控制Java程序中的_threads_,而您想控制外部进程。 –

+0

JNIWrapper似乎不是免费软件。还有另一种解决方案只涉及免费技术吗? – lilezek