我有一台 Windows Server 2003(企业版,SP2)。
我的理解是,当用户注销帐户时,用户创建的任何进程都将终止。但事实并非如此。我通过管理员帐户登录。启动一个简单的 java 进程并注销。但该进程并没有被终止。
是否有任何针对此或类似内容的配置?
我主要是一名软件程序员,对服务器了解不多,所以我陷入了困境。我发现在注销时,1) Win32 应该向该用户启动的所有进程发送 CTRL_LOGOFF_EVENT。2) JVM 应该处理此事件并终止 VM。
但我不明白为什么我注销时 java 进程没有被终止。
任何想法!!!
答案1
您是否可以在不注销的情况下正常关闭进程,还是在这种情况下进程也会挂起?您是否可以检测代码以调查它在哪里“卡住”以及它是否收到了您期望的信号?一些 Sysinternals 进程实用程序链接文本可能会显示您的进程在您期望它终止时正在执行的操作。您可以在再次登录后将调试器附加到延迟进程并查看它正在执行的操作吗?
答案2
不久前我也遇到过类似的事情(但不是 Java),但结果是我无法通过注销来停止的进程实际上是该服务器上运行的服务。
答案3
可能是进程卡住了和/或没有正确处理该事件。
答案4
如果进程正在驱动程序中运行某些代码,或者另一个进程仍打开了句柄,那么在系统尝试终止该进程后,该进程仍会保留在内存中。
如何检查该进程是否被终止?您的 Java 程序正在做什么?