On UN*X, you can send a signal that the program captures and treats as a "stop capturing" indication. I guess the idea was that TerminateProcess() is the Windows equivalent of kill() - but it isn't, because UN*X signals other than SIGKILL can be caught, but TerminateProcess() just kills the process, SIGKILL-style, rather than SIGTERM-style.