当过程与其他过程结合运行时,会观察到手柄泄漏

时间:2011-02-03 14:45:39

标签: windows winapi memory-leaks handle

我的一个可执行文件是在单独运行时打开大约330个句柄。当它与另一个特定过程结合运行时,它会泄漏许多句柄。

我在sysinternals中使用了'handle'实用程序来检查两种情况下打开的所有句柄是什么。当此进程与其他特定进程一起运行时,它具有以下句柄条目的额外功能。

  578: Process       
  57C: Thread        
  580: Process       
  584: Thread        
  588: Process       
  58C: Thread        
  590: Event         
  598: Process       
  59C: Thread        
  5A0: Process       
  5A4: Thread        
  5A8: Process       
  5AC: Thread        
  5B0: Process       
  5B4: Thread        
  5B8: Event        

这样它为Process,Thread,Event打开了400个额外的句柄。 最终这个泄漏导致应用程序崩溃。

我是Windows编程的新手,请原谅我问的是非常基本的问题。 我真的很感激这方面的任何帮助/建议。

  1. 句柄'处理'表示或意味着什么,在什么情况下它将被打开?
  2. 句柄'线程'表示或意味着什么,在什么情况下会被打开?
  3. 为什么单独组合这两个过程会导致手柄泄漏? (这些流程大多是独立的)
  4. 我可以尝试了解这种行为吗?
  5. 有关如何调试此类情况的任何建议吗?
  6. 任何有用的工具可以进一步了解吗?

1 个答案:

答案 0 :(得分:4)

使用CreateProcess()函数时,这是一个非常经典的错误。最后一个参数lpProcessInformation为您提供PROCESS_INFORMATION。如果你对它们不感兴趣,你必须在返回的hProcess和hThread成员上调用CloseHandle()。