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

标签 c++ windows service

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

有什么想法可能导致进程状态和服务状态之间存在差异吗?

最佳答案

当有其他线程继续运行但与您的服务相关的线程没有关系(或已解除关联)时,就会发生这种情况。

请注意,一个进程可能是 Multi-Tenancy 并托管多个服务,因此停止命令并不总是意味着所有者进程必须退出,只是服务应该停止在该进程中运行。

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

关于c++ - 窗口服务停止,但进程继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14821448/

相关文章:

java - 通过命令提示符将java程序安装为Windows服务

c# - ASP .NET 系统设计建议。

c++ - 源文件翻译的第二阶段?

java - Oracle Weblogic 12.1.2 节点管理器状态 java.io.IOException

c++ - 左值引用限定函数可以直接在右值引用限定函数中使用吗?

windows - 从 HKEY_USERS 值获取用户名

C++套接字的send()导致系统错误10053

service - Symfony 4 - 私有(private)外部服务的最佳实践

c++ - 在构造函数中创建一个指针以指向 C++ 中类的实例

c++ - 使用标记分派(dispatch)的 const 成员构造函数中的内存泄漏