File: process005.hs

package info (click to toggle)
ghc 8.0.1-17
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 55,080 kB
  • ctags: 9,332
  • sloc: haskell: 363,120; ansic: 54,900; sh: 4,782; makefile: 974; perl: 542; asm: 315; python: 306; xml: 154; 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