我正在开发一个 Windows 服务应用程序,并注意到一个不寻常的问题。首先,我从 Windows 服务窗口运行该服务并等待状态变为“已启动”。几分钟后点击停止,20秒左右服务状态变为空白,表示服务已经停止。然而,此服务背后的进程继续运行,并且可以在状态更新后的 10-30 秒内在任务管理器中看到。我在 Windows 7sp1 上运行。我还检查了事件查看器,它没有显示我的服务有任何错误。 (我提到这个的原因是因为我最初怀疑超时错误的形式是“在等待来自 x 服务的事务响应时达到超时。”)
有什么想法可能导致进程状态和服务状态之间存在差异吗?
最佳答案
当有其他线程继续运行但与您的服务相关的线程没有关系(或已解除关联)时,就会发生这种情况。
请注意,一个进程可能是 Multi-Tenancy 并托管多个服务,因此停止命令并不总是意味着所有者进程必须退出,只是服务应该停止在该进程中运行。
要进一步调试,当您遇到这种边缘状态时,您应该附加一个调试器并停止所有线程并检查每个线程上的调用堆栈。对于单个服务进程,您很可能会发现某个线程在等待 IO 或其他操作完成时挂起,或者有空闲线程(例如消息循环线程)正在等待永远不会引发的信号。
关于c++ - 窗口服务停止,但进程继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14821448/