我目前正在尝试编写一个 Windows 窗体应用程序(用 C# 编写),它可以启动和停止多个 Java 进程(带有运行特定 jar 文件的参数)。
启动每个进程都没有问题;但是,我需要找到一种方法,使应用程序在退出时关闭所有进程,无论以哪种方式(未知数量的 java 进程),我都在单独的工作线程中运行,以避免在应用程序运行时占用主线程(并捕获进程输出)。
我看了一下这个:Close another process when application is closing
但它似乎不适用于我的目的(它不会关闭进程)。
最佳答案
it does not seem to work for my purpose.. (it doesn't close the processes).
但是它有什么作用呢?它至少会关闭 Java 窗口吗?您的 Java 应用程序是否有窗口?
一般来说,
- 如果可能(即,如果您自己构建 Java 应用程序),您应该在 C# 和 Java 应用程序之间建立一种机制,以优雅地向 Java 应用程序发出关闭信号(套接字等)
- 如果失败,您仍然可以正常关闭 Java 应用程序(如果它们是图形化的)by sending WM_CLOSE 。这就是您尝试(但失败)的
Process.CloseMainWindow/Process.Close
方法所做的事情。如果您的Java应用程序是控制台应用程序,您可以尝试关闭其/他们的standard input和/或 simulating^C
相反。 - 最后,当所有其他方法都失败时,请使用 Process.Kill 来终止您的 Java 子进程——不优雅地终止。您可能希望控制进程首先尝试上述 1. 或 2.,等待所有子进程退出或经过一小段时间(例如 3 秒),然后才对尚未退出的进程继续执行
Process.Kill
。
关于c# - 在应用程序退出时停止 Java 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13442673/