summaryrefslogtreecommitdiff
path: root/src/Process.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-04-04 16:29:55 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-04-04 16:36:05 +0200
commit8b61b194f2f4759689844ab57f2ca7a4b912c468 (patch)
treef56a1099cefd1d6df0c296eec09261685e8ed504 /src/Process.hs
parent7e57c8fddac5c9310efb49d4bc8003659b9e68b4 (diff)
Add pid member to the Process type
Changelog: Added `pid` member to the `Process` type to get its system PID
Diffstat (limited to 'src/Process.hs')
-rw-r--r--src/Process.hs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/Process.hs b/src/Process.hs
index e04bfe7..d4ee68b 100644
--- a/src/Process.hs
+++ b/src/Process.hs
@@ -58,6 +58,7 @@ data Process = Process
, procIgnore :: TVar ( Int, [ ( Int, Maybe Regex ) ] )
, procKillWith :: Maybe Signal
, procNode :: Node
+ , procPid :: Maybe Pid
}
instance Eq Process where
@@ -68,7 +69,8 @@ instance ExprType Process where
textExprValue p = "<process:" <> textProcName (procName p) <> "#" <> textProcId (procId p) <> ">"
recordMembers = map (first T.pack)
- [ ("node", RecordSelector $ procNode)
+ [ ( "node", RecordSelector $ procNode )
+ , ( "pid", RecordSelector $ maybe (0 :: Integer) fromIntegral . procPid )
]
@@ -169,6 +171,7 @@ spawnOn target procName procKillWith cmd = do
procOutput <- liftIO $ newTVarIO []
procIgnore <- liftIO $ newTVarIO ( 0, [] )
let procNode = either (const undefined) id target
+ procPid <- liftIO $ getPid handle
let process = Process {..}
startProcessIOLoops process hout herr
@@ -182,10 +185,9 @@ spawnOn target procName procKillWith cmd = do
closeProcess :: (MonadIO m, MonadOutput m, MonadError Failed m) => Scientific -> Process -> m ()
closeProcess timeout p = do
liftIO $ hClose $ procStdin p
- mbPid <- liftIO $ either getPid (\_ -> return Nothing) (procHandle p)
case procKillWith p of
Nothing -> return ()
- Just sig -> case mbPid of
+ Just sig -> case procPid p of
Nothing -> return ()
Just pid -> liftIO $ signalProcess sig pid
@@ -193,7 +195,7 @@ closeProcess timeout p = do
threadDelay $ floor $ 1000000 * timeout
either terminateProcess (killThread . fst) $ procHandle p
- status <- case mbPid of
+ status <- case procPid p of
Nothing -> Just . Exited <$> liftIO (either waitForProcess (takeMVar . snd) (procHandle p))
Just pid -> liftIO (getProcessStatus True False pid)
case status of