【问题标题】:How to shutdown java application correctly from C# one如何从 C# 1 正确关闭 Java 应用程序
【发布时间】:2012-07-03 21:06:37
【问题描述】:

当我使用CTRL-C 时,我的 java 应用程序会正确关闭,java 应用程序会在关闭前保存所有数据。现在我尝试使用 Process.Close() 从我的 C# 控制台应用程序关闭这个 java 应用程序,但是当我使用它时应用程序不保存任何数据,我也尝试了 Process.CloseMainWindow() 但使用它什么也没发生,还有 Process.Kill() 但是使用这个过程刚刚被杀死,没有任何保存。

如何从 C# 控制台应用程序提高 java 应用程序的关闭挂钩?

【问题讨论】:

  • 您的应用程序中是否已经有一个关闭挂钩并且 Process.close() 没有触发它?
  • 好的,抱歉,没有仔细阅读问题
  • 从任务管理器结束程序时是否执行了关闭挂钩?如果是这样,您可以尝试将 WM_QUIT 或 WM_CLOSE 消息发布到您的 java 进程。

标签: c# java shutdown-hook


【解决方案1】:

另一个应用程序不能引发关闭挂钩。

关闭挂钩在以下情况下运行:

  • 程序正常存在。例如,System.exit() 被调用,或者 最后一个非守护线程退出。
  • 虚拟机已终止。例如CTRL-C。这对应于 在 Unix 系统上 kill -SIGTERM pid 或 kill -15 pid。

关闭钩子在以下情况下不会运行:

  • 虚拟机中止
  • 向 Unix 上的虚拟机进程发送 SIGKILL 信号 系统。例如kill -SIGKILL pid 或 kill -9 pid
  • TerminateProcess 调用被发送到 Windows 系统上的进程。

【讨论】:

  • 谢谢!我应该用我的 C# 应用程序在 Windows 上运行关闭挂钩吗?
  • 如何将 CTRL-C 信号发送到 java 应用程序
  • 我建议宁愿尝试使用 cmd 杀死进程?但是我不能肯定它会起作用,请参阅此处了解更多信息:techmonks.net/… 您必须对其进行测试,尽管缺点是您的 jar 的可移植性。
  • @Robert 这可能有助于将 CTRL-C 发送到 Java 控制台:stackoverflow.com/questions/2517586/… 查看答案链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2016-03-20
  • 2011-04-26
  • 2023-03-21
相关资源
最近更新 更多