在应用程序退出时停止Java进程

时间:2012-11-18 17:34:44

标签: c# java process

我目前正在尝试编写一个Windows窗体应用程序(在C#中),它可以启动和停止多个Java进程(使用参数来运行特定的jar文件)。

我开始每个过程都没有问题;但是我需要找到一种方法让应用程序在退出时关闭所有这些,无论哪种方式(是一个未知数量的java进程),我在每个单独的工作线程中运行,以避免占用主线程应用程序正在运行(并捕获进程输出)。

我看了一下这个:Close another process when application is closing

但它似乎不适用于我的目的(它不会关闭进程)。

2 个答案:

答案 0 :(得分:1)

  

它似乎不适用于我的目的..(它不会关闭进程)。

但是它做了什么?它至少关闭了Java窗口吗?您的Java应用程序甚至窗口吗?

一般来说,

  1. 如果可能(即如果您自己构建Java应用程序),则应在C#和Java应用程序之间建立一种机制,以便优雅地通知Java应用程序关闭(套接字等)
  2. 如果失败了,您仍然可以优雅地关闭Java应用程序(如果它们是图形化的by sending WM_CLOSE)。这就是您尝试(和失败)的Process.CloseMainWindow/Process.Close方法。如果您的Java应用程序是控制台应用程序,则可以尝试关闭其/ standard input和/或simulating ^C
  3. 最后,当所有其他方法都失败时,使用Process.Kill来终止您的Java子进程 - 非常不合理。您可能希望您的控制过程首先尝试1.或2.上述,等待所有子进程都退出或直到短时间(例如3s)已经过去,然后继续Process.Kill进行任何操作流程尚未退出。

答案 1 :(得分:0)

procrss.kill Kill方法是让进程遇到暴力和快速结束的绝佳方法。 Kill方法可以抛出一些例外。但它往往不能并且通常会实现你所希望的目标 - 这是介于冷血谋杀和快速无痛的执行之间。