Java进程挂起并继续

Posted

技术标签:

【中文标题】Java进程挂起并继续【英文标题】:Java process suspend and continue 【发布时间】:2013-10-02 17:07:31 【问题描述】:

我正在寻找能够在 Java 上执行此操作的解决方案:

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

据我所知,Java 标准只实现了第一个和第四个,但没有实现第二个和第三个。

我能做什么?

【问题讨论】:

你知道的还不够多。你可以使用wait/notify。您可以使用java.util.concurrent 包。 另外,您可以在java中执行shell命令,通过它可以轻松实现2和3。可能还有其他一些方法。 该解决方案适用于线程。它也适用于流程吗? 【参考方案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。

【讨论】:

那么,我不能像蜘蛛鲍里斯建议的那样使用等待/通知吗? 不,等待/通知用于控制 Java 程序中的线程,而您想控制外部进程。 JNIWrapper 似乎不是免费软件。有没有其他只涉及免费技术的解决方案? 自己编写原生 Windows 代码,即使用 Visual C++ Express 版本生成 DLL。使用原始 JNI 从您的 Java 程序调用此 DLL。

以上是关于Java进程挂起并继续的主要内容,如果未能解决你的问题,请参考以下文章

调试随机挂起并使用 100% 处理器内核的 Python 脚本

为啥我与 Apple APNS 的 TCP 连接挂起并强行断开连接

Visual Studio 2010 挂起附加到进程/调试

JProfiler 挂起并显示“等待 JProfiler GUI 连接”消息

为啥 INSERT 查询无限期挂起并锁定 PostgreSQL 数据库和 pgAdmin

Xcode 13:构建挂起并显示“iPhone 很忙:让 Apple Watch 为开发做好准备”