Skip to content

Commit

Permalink
Add getPid
Browse files Browse the repository at this point in the history
This allows fetching a process' ID without using `unsafeProcessHandle`.
  • Loading branch information
9999years committed Aug 15, 2024
1 parent d5e9fb3 commit 24e7d3b
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/System/Process/Typed.hs
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ module System.Process.Typed
, checkExitCode
, checkExitCodeSTM

-- ** Process ID
, getPid

-- ** Process streams
, getStdin
, getStdout
Expand Down Expand Up @@ -138,6 +141,7 @@ import Control.Concurrent (threadDelay)
import Control.Concurrent.Async (asyncWithUnmask, cancel, waitCatch)
import Control.Concurrent.STM (newEmptyTMVarIO, atomically, putTMVar, TMVar, readTMVar, tryReadTMVar, STM, tryPutTMVar, throwSTM, catchSTM)
import System.Exit (ExitCode (ExitSuccess, ExitFailure))
import System.Posix.Types (ProcessID)
import System.Process.Typed.Internal
import qualified Data.ByteString.Lazy as L
import GHC.RTS.Flags (getConcFlags, ctxtSwitchTime)
Expand Down Expand Up @@ -641,6 +645,17 @@ checkExitCodeSTM p = do
, eceStderr = L.empty
}

-- | Returns the PID (process ID) of a subprocess.
--
-- 'Nothing' is returned if the underlying 'P.ProcessHandle' was already closed.
-- Otherwise a PID is returned that remains valid as long as the handle is
-- open. The operating system may reuse the PID as soon as the last handle to
-- the process is closed.
--
-- @since 0.2.12.0
getPid :: Process stdin stdout stderr -> IO (Maybe ProcessID)
getPid = P.getPid . pHandle

-- | Internal
clearStreams :: ProcessConfig stdin stdout stderr -> ProcessConfig () () ()
clearStreams pc = pc
Expand Down

0 comments on commit 24e7d3b

Please sign in to comment.