nonblocking waitForProcess
This commit is contained in:
parent
740f4d3843
commit
0c60da3472
@ -26,8 +26,8 @@ import System.Exit (exitFailure, exitSuccess, ExitCode (..))
|
|||||||
import System.FilePath (splitDirectories, dropExtension, takeExtension)
|
import System.FilePath (splitDirectories, dropExtension, takeExtension)
|
||||||
import System.Posix.Types (EpochTime)
|
import System.Posix.Types (EpochTime)
|
||||||
import System.PosixCompat.Files (modificationTime, getFileStatus)
|
import System.PosixCompat.Files (modificationTime, getFileStatus)
|
||||||
import System.Process (createProcess, proc, terminateProcess, readProcess,
|
import System.Process (createProcess, proc, terminateProcess, readProcess, ProcessHandle,
|
||||||
waitForProcess, rawSystem, runInteractiveProcess)
|
getProcessExitCode,waitForProcess, rawSystem, runInteractiveProcess)
|
||||||
import System.IO (hClose, hIsEOF, hGetLine, stdout, stderr, hPutStrLn)
|
import System.IO (hClose, hIsEOF, hGetLine, stdout, stderr, hPutStrLn)
|
||||||
|
|
||||||
import Build (recompDeps, getDeps, isNewerThan)
|
import Build (recompDeps, getDeps, isNewerThan)
|
||||||
@ -113,7 +113,7 @@ devel isCabalDev passThroughArgs = do
|
|||||||
threadDelay 1000000
|
threadDelay 1000000
|
||||||
putStrLn "Terminating development server..."
|
putStrLn "Terminating development server..."
|
||||||
terminateProcess ph
|
terminateProcess ph
|
||||||
ec <- waitForProcess ph
|
ec <- waitForProcess' ph
|
||||||
putStrLn $ "Exit code: " ++ show ec
|
putStrLn $ "Exit code: " ++ show ec
|
||||||
Ex.throwTo watchTid (userError "process finished")
|
Ex.throwTo watchTid (userError "process finished")
|
||||||
watchForChanges hsSourceDirs list
|
watchForChanges hsSourceDirs list
|
||||||
@ -258,6 +258,15 @@ rawSystemFilter command args = do
|
|||||||
go handlein handleout
|
go handlein handleout
|
||||||
_ <- forkIO $ go outh stdout
|
_ <- forkIO $ go outh stdout
|
||||||
_ <- forkIO $ go errh stderr
|
_ <- forkIO $ go errh stderr
|
||||||
waitForProcess ph
|
waitForProcess' ph
|
||||||
|
|
||||||
|
-- nonblocking version
|
||||||
|
waitForProcess' :: ProcessHandle -> IO ExitCode
|
||||||
|
waitForProcess' pid = go
|
||||||
|
where
|
||||||
|
go = do
|
||||||
|
mec <- getProcessExitCode pid
|
||||||
|
case mec of
|
||||||
|
Just ec -> return ec
|
||||||
|
Nothing -> threadDelay 100000 >> go
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user