窗口服务停止,但进程继续运行

时间:2013-02-11 21:46:51

标签: c++ windows service

我正在开发一个Windows服务应用程序,并注意到一个不寻常的问题。首先,我从Windows服务窗口运行该服务,并等待状态转为“已启动”。几分钟后,我点击停止,20秒左右服务状态变为空白,表示服务已停止。然而,此服务背后的过程继续运行,并且可以在状态更新后的任务管理器中看到10-30秒。我在Windows 7sp1上运行。我还检查了事件查看器,它没有显示我的服务中的任何错误。 (我提到这个的原因是因为我最初怀疑“等待来自x服务的事务响应时达到了超时”形式的超时错误。)

任何想法可能导致流程状态和服务状态之间的差异?

1 个答案:

答案 0 :(得分:6)

如果有其他线程继续运行且与您的服务相关的线程没有任何关系(或已与其脱离关联),则会发生这种情况。

请注意,进程可能是多租户并托管多个服务,因此stop命令并不总是暗示所有者进程必须退出,只是服务应该停止在该进程中运行。

要进一步调试,当遇到此limbo状态时,应附加调试器并停止所有线程并检查每个线程上的调用堆栈。对于单个服务进程,您可能会发现线程在等待IO或其他操作完成时挂起,或者存在空闲线程,例如等待永远不会被引发的信号的消息循环线程。