wangwangblog
2016-08-30 06:14
采纳率: 0%
浏览 3.6k

任务管理器结束进程的时候,进程一直存在,这是为什么?

任务管理器结束进程,进程一直存在,由于是单例程序,所以无法再次运行,通过PC hunter工具检测到,该进程下的一个或两个线程一直处于等待状态,只要结束掉这两个线程就可以,可以重新启动程序。像这种问题是程序方面的问题吗?有点迷糊,请各位大神指点指点。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 当作看不见 2016-08-30 06:38

    那个程序没有设置好,应该结束进程时候,也要杀死子线程,你试一下不用任务管理器结束线程,应该会自动关闭掉子线程的。可能是通过任务管理器关闭的,所以导致没有杀死子线程这种情况的发生

    点赞 打赏 评论
  • wangwangblog 2016-08-30 08:06

    我在Windows编程启示录上看到这样一个条款:
    为什么有些进程在被终止之后还停留在任务管理器中
    当某个进程结束时(可能是正常结束,也可能是因为调用了像TerminateProcess之类的函数),这个进程的用户态模块将被删除。但内核态模块只有在与线程相关的所有驱动程序执行完成之后才会被删除。
    例如,如果某个线程正处于I/O操作中,那么将会给负责I/O的驱动程序发送一个内核信号来取消这个操作。如果驱动程序的行为是良好的,那么它将清除与这个未完成I/O相关的一些信息并且释放线程。如果驱动程序的行为是不好的(可能是因为驱动程序管理的硬件表现出奇怪的行为),那么可能需要花很长的时间来清除这个未完成的I/O。在这段时间里,驱动程序将不会释放这个线程(以及这个线程所在的进程)。实际的情况要更复杂一些,但这里的简单模型对于我们的讨论已经足够。
    换句话说,如果你终止了某个进程后还能在任务管理器中看到这个进程,那么实际上这个进程已经停止运行了,只不过还有些残留的信息保留在系统中,只有当与这个进程相关的所有驱动程序都完成了清除操作并且指向这个进程的句柄都已经关闭,进程才会完全消失。

    点赞 打赏 评论

相关推荐 更多相似问题