【发布时间】:2016-07-19 22:10:46
【问题描述】:
我需要从_spawnv() 调用句柄上的closeHandle() 吗?
另外,当我调用_spawnv()时,新进程句柄的引用计数是否增加?
而且,如果它是递增的,那么一旦它终止,进程是否会进入类似于“僵尸”状态的 linux?
【问题讨论】:
我需要从_spawnv() 调用句柄上的closeHandle() 吗?
另外,当我调用_spawnv()时,新进程句柄的引用计数是否增加?
而且,如果它是递增的,那么一旦它终止,进程是否会进入类似于“僵尸”状态的 linux?
【问题讨论】:
如果您不需要手柄,则应将其关闭。但是,不这样做的后果是轻微的,除非您正在生成大量进程。内核必须保留进程对象(我认为这大致类似于 UNIX 中的僵尸进程),但进程对象的数量没有固定限制,终止的进程只需要一个很小的内核中的内存量。一旦您的进程退出,泄漏的资源将被自动清理。
至于句柄的引用计数,there's no such thing.句柄是不被引用计数的。
【讨论】:
在异步模式下调用 _spawnv 时会返回进程句柄。我假设句柄始终有效,因为您可以尝试通过 _cwait 等待生成的进程(如果它不是标识调用进程或线程的伪句柄,则关闭给定的句柄)。
当一个进程终止时,它的内核对象一直存在,直到所有指向它的句柄和指针引用都被删除。在这种状态下,该进程实际上没有地址空间,并且 AFAIK 未列在正在运行的进程列表中(您在任务管理器中看不到它)。
【讨论】: