【问题标题】:How often are process handles reused进程句柄的重用频率
【发布时间】:2009-11-29 12:46:21
【问题描述】:

当我使用 shell 函数打开它时,我注意到一个应用程序句柄。 然后我稍后使用该句柄关闭应用程序。 但是,用户也可以自己关闭该其他应用程序。 然后该句柄是否可以被 Windows 重用,以便在我使用该句柄时关闭另一个进程。 有可能吗?

【问题讨论】:

    标签: windows shell hwnd


    【解决方案1】:

    不,您不必担心。由 OpenProcess、ShellExecuteEx() 或 CreateProcess 返回的句柄使进程对象保持活动状态。这样就可以在进程终止后调用 GetExitCodeProcess() 来检索退出代码。

    在对象的最后一个句柄关闭之前,对象不会被释放。与此线程中先前给出的建议相反,调用 CloseHandle() 非常重要,否则您将发生泄漏。

    【讨论】:

    • 谢谢,但我不太明白。这里的内存泄漏是由于 closehandle() 导致的,没有被调用。执行 shell 调用的应用正常关闭后是否会清除?
    • 是的,Windows 会清理未关闭的句柄。不要让它走得太远。
    • 不会只调用 sendmessage 调用 SendMessage(intHandle, const_CLOSE, 0&, 0&) 既关闭应用程序又执行 closehandle() 的工作?
    【解决方案2】:

    您可以等待进程句柄来确定它何时退出。

    WaitForSingleObject(hProcess, INFINITE);

    一旦返回,您就知道该进程已退出,您无需关闭它。

    【讨论】:

    • 不,需要调用 CloseHandle() 以避免泄漏。
    • 谢谢你,但似乎句柄不会被重用,因为它一直保持打开状态,直到执行 shell 命令的应用程序关闭它。
    猜你喜欢
    • 2014-01-18
    • 1970-01-01
    • 2014-10-23
    • 2012-08-14
    • 1970-01-01
    • 2019-09-01
    • 2010-12-30
    • 2017-08-07
    相关资源
    最近更新 更多