【问题标题】:How to detect program java force to close from Windows Task Manager?如何从 Windows 任务管理器检测程序 java 强制关闭?
【发布时间】:2013-12-01 23:56:50
【问题描述】:

如果我问了这样一个菜鸟问题而冒犯了某人,大家深表歉意,因为我看到有人因为不恰当而被“标记”了。

这是我第一次在这里提问,如果有什么不合适的地方请见谅,如果我的英语不是很好,请见谅。

当我的程序已通过任务管理器关闭时,我正在尝试创建一个临时文件...但我不知道如何检测我的程序是否已通过任务管理器关闭!!!

我该怎么做?我google了很多,但是要么我使用了错误的关键字,要么互联网上没有简单的解决方案。我希望这里有人可以帮助我。

提前致以最诚挚的问候和感谢。

【问题讨论】:

  • 需要更多信息。操作系统?您是否希望 Java 程序创建文件或其他内容?你为什么要这个文件?你想完成什么?
  • 是的,亲爱的..我希望java程序在通过任务管理器关闭它之前创建tmp文件....我知道如何创建一个tmp文件,但我不知道如何捕捉如果关闭是通过任务管理器
  • 也许您可以运行其他将创建 tmp 文件的 java 应用程序(使用 Runtime.getRuntime().exec() )。在这种情况下,您可以检查进程是否正在运行。
  • 亲爱的...我要创建的文件与程序中的数据相关,该程序被任务管理器强制关闭!!!

标签: java taskmanager


【解决方案1】:

要捕获通过任务管理器的“应用程序”选项卡发送的定期终止请求,如 SIGTERMWM_CLOSE,可以安装关闭挂钩(我假设您使用的是 Windows,但这并没有多大用处差异)。

但是,当从“进程”选项卡中杀死时,或者在 Windows 上使用 taskkill /f ... 或在 Linux 或 Unix 上使用 kill -9 ... 时,进程 (VM) 会被强制终止,无法做出反应。通过 Windows 上的“应用程序无响应”对话框完成的杀戮也是如此。

因此,您需要确保您可以处理因强制终止(断电或硬件故障除外)而损坏/不完整的文件。

【讨论】:

  • 亲爱的@Sam ...你说的太对了...我知道你所说的一切...但我不知道如何在我的java程序中捕捉到这种杀戮!!!跨度>
  • 不,你现在不能。尽管不同的语言提供了对不同信号和退出处理机制的访问,但存在某些差异,但结果是相同的(当然,在用户空间中)。即使进程在不可中断的系统调用中锁定了一段时间,它也会在完成后立即终止。您唯一的选择是通过使用事务性 IO 在常规执行期间保持一致性,但要付出性能损失。一个例子是基于文件的数据库系统,如 sqlite,它提供了在提交(同步)时额外刷新磁盘缓存的选项。
  • 非常感谢你@Sam .... 它帮助很大 .... 我会将你的答案标记为 true (y)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2012-05-05
相关资源
最近更新 更多