File: process005.hs

package info (click to toggle)
ghc 8.8.4-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 80,760 kB
  • sloc: haskell: 461,232; ansic: 62,975; sh: 8,706; python: 1,902; asm: 1,714; makefile: 1,120; perl: 458; javascript: 207; xml: 196; cpp: 147; ruby: 84; lisp: 7
file content (26 lines) | stat: -rw-r--r-- 706 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module Main where

import Control.Concurrent
import System.IO
import System.Process

main :: IO ()
main = do p <- foldl (>>=) (return stdin) (replicate 10 docat) >>= docat0
          t <- myThreadId
               -- timeout
          forkIO $ do threadDelay 5000000; killThread t
          waitForProcess p
          putStrLn "end"
          return ()

docat :: Handle -> IO Handle
docat hin = do
  (_, Just hout, _, ph) <- 
         createProcess (proc "cat" []){ std_in = UseHandle hin,
                                        std_out = CreatePipe }
  return hout

docat0 :: Handle -> IO ProcessHandle
docat0 hin = do
  (_,_,_,ph) <-  createProcess (proc "cat" []){ std_in = UseHandle hin }
  return ph