【发布时间】:2012-01-13 17:25:01
【问题描述】:
是否可以使用 java 代码在 Windows 中停止应用程序? 我想创建一个程序,它就像在我的电脑上停止应用程序的快捷方式。是否可以使用 ProcessBuilder ?谢谢你
【问题讨论】:
-
我过去通过使用 Runtime.exec 包装对 pskill Windows 实用程序的调用(不知道该实用程序是否仍然存在)来完成此操作。但是我不知道操作系统对 pskill 做出了哪些保证。 Windows 上的 AFAICT 与 Unx 上的不同。在 Unx 上发出 SIGKILL 意味着程序必须立即退出,并且它的所有资源必须归还给操作系统(这是理论,在实践中效果很好)。
-
TerminateProcess 和 NtTerminateProcess 类似于在 NT 中发送 SIGKILL - 也就是说,它请求操作系统“立即”终止进程,尽管(对于 Linux 和 Windows,可能是大多数 *nix)这可能是由于进程访问某些系统资源(例如永远不会返回的 IO 调用)而延迟。类似于 Windows 中的 SIGTERM 是向应用程序的窗口发送 WM_CLOSE 窗口消息,除非应用程序是服务。在这种情况下,将 ControlService 与 dwControl = SERVICE_CONTROL_STOP 一起使用。