diff --git a/ProcessWin32.c b/ProcessWin32.c
index 43bcff513f9939b5dac4f86f4307104465b1209a..1dafabe8fd329bab1c9863f3cf79931b23ecd9af 100644
--- a/ProcessWin32.c
+++ b/ProcessWin32.c
@@ -1453,7 +1453,6 @@ int kwsysProcess_WaitForExit(kwsysProcess* cp, double* userTimeout)
 void kwsysProcess_Kill(kwsysProcess* cp)
 {
   int i;
-
   /* Make sure we are executing a process.  */
   if(!cp || cp->State != kwsysProcess_State_Executing || cp->TimeoutExpired ||
      cp->Killed)
@@ -1485,7 +1484,10 @@ void kwsysProcess_Kill(kwsysProcess* cp)
     /* Not Windows 9x.  Just terminate the children.  */
     for(i=0; i < cp->NumberOfCommands; ++i)
       {
-      kwsysProcessKillTree(cp->ProcessInformation[i].dwProcessId);
+      kwsysProcessKillTree(cp->ProcessInformation[i].dwProcessId); 
+      // close the handle if we kill it
+      kwsysProcessCleanupHandle(&cp->ProcessInformation[i].hThread);
+      kwsysProcessCleanupHandle(&cp->ProcessInformation[i].hProcess);
       }
     }
 
@@ -1851,7 +1853,6 @@ int kwsysProcessCreate(kwsysProcess* cp, int index,
   r = CreateProcess(0, realCommand, 0, 0, TRUE,
                     cp->Win9x? 0 : CREATE_SUSPENDED, 0, 0,
                     &si->StartupInfo, &cp->ProcessInformation[index]);
-
   if(cp->Win9x)
     {
     /* Free memory.  */
@@ -2114,7 +2115,6 @@ void kwsysProcessCleanupHandleSafe(PHANDLE h, DWORD nStdHandle)
 void kwsysProcessCleanup(kwsysProcess* cp, int error)
 {
   int i;
-
   /* If this is an error case, report the error.  */
   if(error)
     {
@@ -2861,6 +2861,7 @@ static void kwsysProcessKill(DWORD pid)
     {
     TerminateProcess(h, 255);
     WaitForSingleObject(h, INFINITE);
+    CloseHandle(h);
     }
 }