【问题标题】:Should the handle returned from _spawnv be closed?从 _spawnv 返回的句柄是否应该关闭?
【发布时间】:2016-07-19 22:10:46
【问题描述】:

我需要从_spawnv() 调用句柄上的closeHandle() 吗?

另外,当我调用_spawnv()时,新进程句柄的引用计数是否增加?

而且,如果它是递增的,那么一旦它终止,进程是否会进入类似于“僵尸”状态的 linux?

【问题讨论】:

    标签: windows winapi process


    【解决方案1】:

    如果您不需要手柄,则应将其关闭。但是,不这样做的后果是轻微的,除非您正在生成大量进程。内核必须保留进程对象(我认为这大致类似于 UNIX 中的僵尸进程),但进程对象的数量没有固定限制,终止的进程只需要一个很小的内核中的内存量。一旦您的进程退出,泄漏的资源将被自动清理。

    至于句柄的引用计数,there's no such thing.句柄是不被引用计数的。

    【讨论】:

      【解决方案2】:

      在异步模式下调用 _spawnv 时会返回进程句柄。我假设句柄始终有效,因为您可以尝试通过 _cwait 等待生成的进程(如果它不是标识调用进程或线程的伪句柄,则关闭给定的句柄)。

      当一个进程终止时,它的内核对象一直存在,直到所有指向它的句柄和指针引用都被删除。在这种状态下,该进程实际上没有地址空间,并且 AFAIK 未列在正在运行的进程列表中(您在任务管理器中看不到它)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        • 2014-01-18
        相关资源
        最近更新 更多