void main()
{   ......
  CreateProcess(,"Child",);
  ....
  //我该怎么关闭Child进程??
}
我在上面的主程序中用CreateProcess(,"Child",)创建一个子进程Child,如果Child消耗的内存大于一个值(比如:32M),我就想在强行关闭Child,我该怎么实现呢?

解决方案 »

  1.   

    如果child有窗口,可以给它发送WM_CLOSE消息。
    强制关闭用TerminateProcess
      

  2.   

    SendMessage(hWnd,WM_CLOSE,0,0);或TerminateProcess(hProcess)
      

  3.   

    其中的hWnd可通过FindWindow查找要关闭进程的窗口标题得到,hProcess就是CreateProcess的返回值
      

  4.   

    用CreateProcess创建的进程,在用线程钩子挂钩时该用什么ID呢?ProcessInfo里的dwThreadID和dwProcessID都试了,报参数错误
      

  5.   

    TerminateProcess会不会引起Child里内存泄漏呢?动态分配的对象会不会被释放?
      

  6.   

    TerminateProcess会引起内存泄漏,只有线程函数正常返回的时候才能算是安全结束线程.一般要在线程函数里WaitForSingleObject(事件对象句柄,...);一个事件对象,然后在主线程SetEvent(事件对象句柄)这个事件对象后,此线程return 1;
    就不会有资源泄漏了.
      

  7.   

    俺不是俺进来声明一下就走!ExitProcess和TerminateProcess在《Windows核心编程》中说:最好不要使用这个东东!因为虽然说这么结束进程,操作系统应该回收资源,但是C++运行期库的一些资源无法自动回收!
      

  8.   

    看来我还有必要说得清楚一点,我的目的是要限制Child进程的最高内存使用率,不要让Child进程消耗的内存大于我事先设定的值,进程Child在运行中的任意时刻,一旦消耗的内存达到某个值(比如:32M),我就想马上得知Child已经到了我所允许它使用的最大内存状态;我获得Child的这个状态时我就关闭Child.
    也就是说,我要Child消耗的内存不能超过32M,一旦它超过了32M,马上通知我,然后我自己用TerminateProcess把它关闭
      

  9.   

    CreatProcess创建的进程是独立的进程还是属于创建他的主线程的子程?
      

  10.   

    楼主在进程中检测超过就释放资源然后return或者用监视进程TerminateProcess(pi.dwProcessID),流程你自己不都说的很清楚了吗?
      

  11.   

    我是想用CreateProcess()来调用一个控制台程序a.exe,如果a.exe在运行期间所耗的内存大于某个值,我就关闭它,但是我不知道怎么检测,各位高手有什么绝招吗
      

  12.   

    试试GetProcessMemoryInfo(hProcess,&PMC,sizeof(PMC))读取内存占用
    hProcess=OpenProcess(..,..,pi.dwProcessID)
      

  13.   

    GetProcessMemoryInfo获得进程内存使用量
    然后发送退出消息WM_CLOSE
      

  14.   

    GetProcessMemoryInfo获得进程内存使用量,但这只是能获得某一时刻的内存使用量,Child进程是运行一个时间段的,那岂不是要在while循环体中用GetProcessMemoryInfo不断的检测内存使用量?
    有没有更好的方法?例如在CreateProcess(,Child,..)时就设定Child的最大内存使用量?请高手手下留"情"!!
      

  15.   

    BOOL GetProcessWorkingSetSize(
        HANDLE hProcess,  // open handle to the process of interest
        LPDWORD lpMinimumWorkingSetSize,  // points to variable to receive minimum working set size
        LPDWORD lpMaximumWorkingSetSize  // points to variable to receive maximum working set size
       );