是否应关闭从_spawnv返回的句柄?

时间:2016-07-19 22:10:47

标签: windows winapi process

我是否需要从closeHandle()处理句柄上的_spawnv()

此外,当我致电_spawnv()时,新流程句柄的引用计数是否会递增?

并且,如果它增加了,那么一旦它终止,进程就不会进入类似“僵尸”状态的linux?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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