CreateProcess导致的资源泄漏

原创 2008年10月14日 09:34:00

代码如下:
  1. // create process and wait for quiting
  2. bool XXXX::RunProcess(const std::string& command)
  3. {
  4.     PROCESS_INFORMATION pi;
  5.     STARTUPINFOA startInfo;
  6.     memset(&startInfo, 0, sizeof(STARTUPINFO));
  7.     startInfo.cb = sizeof(STARTUPINFO);
  8.     startInfo.wShowWindow = SW_HIDE;
  9.     startInfo.dwFlags = STARTF_USESHOWWINDOW;
  10.     // create process
  11.     if (!CreateProcessA( NULL, (LPSTR)command.c_str(), NULL, NULL, TRUE, 0, NULL, NULL, &startInfo, π))
  12.     {
  13.         return false;
  14.     }
  15.     WaitForSingleObject(pi.hProcess, INFINITE);
  16.     return true;
  17. }
因为这段代码是定时被调用,运行一段时间后,用ProcessExplorer发现有大量Thread和Process的handle泄漏。
CreateProcess会创建一个Thread和Process来运行指定的程序,所以在程序运行结束后需要释放这两个handle。

需要要在return之前添加以下代码来释放资源:
  1.     CloseHandle(pi.hProcess);
  2.     CloseHandle(pi.hThread);


相关文章推荐

一个CREATEPROCESS()的实例

  • 2009年11月14日 19:41
  • 62KB
  • 下载

CreateProcess拦截exe程序

  • 2011年03月30日 09:05
  • 489KB
  • 下载

思路:如何跳过CreateProcess调用底层创建进程函数

论坛近日有人在问如何跳过CreateProcess调用底层的NtCreateProcess。 我想说的是不能单纯看这个问题,首先不同NT内核版本CreateProcess进入 底层的路径是不同的:...
  • mydo
  • mydo
  • 2012年10月28日 19:25
  • 4295

CreateProcess

  • 2010年06月24日 11:02
  • 65KB
  • 下载

CreateProcess 启动其他程序

【转】VC中如何启动其它程序,并且获得启动程序的PID 创建进程CreateProcess函数 这样就可以执行c:\test.exe 如果你要的PID是进程ID那么这个 piProcIn...

用CreateProcess创建进程

  • 2010年07月02日 09:15
  • 47KB
  • 下载

CreateProcess 内部实现

*ReactOS学习笔记* CreateProcess 内部实现 调用CreateProcessW    调用CreateProcessInternalW       参数检查 ...

Hook CreateProcess 拦截生成的进程

  • 2011年04月16日 09:23
  • 307KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CreateProcess导致的资源泄漏
举报原因:
原因补充:

(最多只允许输入30个字)