Index: src/OFProcess.h ================================================================== --- src/OFProcess.h +++ src/OFProcess.h @@ -40,11 +40,11 @@ { #ifndef _WIN32 pid_t pid; int readPipe[2], writePipe[2]; #else - HANDLE readPipe[2], writePipe[2]; + HANDLE process, readPipe[2], writePipe[2]; #endif int status; BOOL atEndOfStream; } Index: src/OFProcess.m ================================================================== --- src/OFProcess.m +++ src/OFProcess.m @@ -19,10 +19,11 @@ #include #include #ifndef _WIN32 # include +# include # include #endif #ifdef __MACH__ # include @@ -260,11 +261,11 @@ [self freeMemory: argumentsCopy]; } objc_autoreleasePoolPop(pool); - CloseHandle(pi.hProcess); + process = pi.hProcess; CloseHandle(pi.hThread); CloseHandle(readPipe[1]); CloseHandle(writePipe[0]); #endif @@ -460,12 +461,14 @@ if (readPipe[0] != -1) close(readPipe[0]); if (writePipe[1] != -1) close(writePipe[1]); - if (pid != -1) + if (pid != -1) { + kill(pid, SIGKILL); waitpid(pid, &status, WNOHANG); + } pid = -1; readPipe[0] = -1; writePipe[1] = -1; #else @@ -472,10 +475,16 @@ if (readPipe[0] != NULL) CloseHandle(readPipe[0]); if (writePipe[1] != NULL) CloseHandle(writePipe[1]); + if (process != INVALID_HANDLE_VALUE) { + TerminateProcess(process, 0); + CloseHandle(process); + } + + process = INVALID_HANDLE_VALUE; readPipe[0] = NULL; writePipe[1] = NULL; #endif } @end