正在终止后台进程



我正在运行一个Java程序,该程序使用CreateProcess作为程序的服务器,没有窗口(使用此处显示的设置)。我有一个对象,它在构造函数中运行进程,保存进程句柄,并在对TerminateProcess的调用中在析构函数中使用它来杀死它

我的问题是,当我的窗口关闭时,X在角落里,这个析构函数永远不会被调用,进程继续在后台运行,句柄丢失,我没有迹象表明它仍在运行,也没有办法杀死它(除了任务管理器)。我怎样才能确保它被杀死。

大图
这是我需要做的。如果你能提出一个更好的方法来实现这一点,那也没关系
每次运行程序(有时甚至在程序中多次运行),我都需要一个新的java服务器实例。我想在没有任何可见指示(窗口等)的情况下运行它,但这不是一个要求。我do需要能够确保无论发生什么,我打开的服务器在我用完它时都会被杀死,或者确保没有它的运行实例,如果是这样,在我开始新的实例之前杀死它。(或者两者兼而有之。)使用进程名是不好的,因为它只是java,而且我不想杀死计算机上的所有Java实例。我可以(如果我知道如何)检查程序是否正在侦听此服务器使用的端口,如果是,请关闭它。

编辑
我忘了提一下(如果有区别的话)GUI是C#,我无法控制它或Java程序本身。我正在用c++编写一个库,它从c#GUI调用,需要使用Java服务器。

创建一个名为"看门狗"的新后台进程。该进程获得主GUI和后台Java服务器的句柄,然后在GUI的进程句柄上调用WaitForSingleObject。当此调用返回时,您将终止Java服务器。

修改DllMain入口点以处理DLL_PROCESS_DETACH。它的响应应该是执行您想要的任何清理。

最新更新