{- Windows processes - - Copyright 2014 Joey Hess - - License: BSD-2-clause -} {-# LANGUAGE ForeignFunctionInterface #-} module Utility.WinProcess where import Utility.PID import System.Win32.Process import Control.Exception (bracket) import Control.Monad terminatePID :: PID -> IO () terminatePID p = bracket (openProcess pROCESS_TERMINATE False p) (void . c_closeProcess) (\h -> void $ c_TerminateProcess h 1) foreign import ccall unsafe "windows.h TerminateProcess" c_TerminateProcess :: ProcessHandle -> Int -> IO Int foreign import ccall unsafe "windows.h CloseHandle" c_closeProcess :: ProcessHandle -> IO Bool