+++ /dev/null
-import Posix
-
-main =
- getParentProcessID >>= \ ppid ->
- getProcessID >>= \ pid ->
- putStr "Parent Process ID: " >>
- print ppid >>
- putStr "\nProcess ID: " >>
- print pid >>
- putStr "\nforking ps uxww" >>
- print ppid >>
- putChar '\n' >>
- forkProcess >>= \ child ->
- case child of
- Nothing -> executeFile "ps" True ["uxww" ++ show ppid] Nothing
- Just x -> doParent x pid
-
-doParent cpid pid =
- getProcessStatus True False cpid >>
- putStr "\nChild finished. Now exec'ing ps uxww" >>
- print pid >>
- putChar '\n' >>
- executeFile "ps" True ["uxww" ++ show pid] Nothing
+++ /dev/null
-import Posix
-
-main =
- executeFile "printenv" True [] (Just [("ONE","1"),("TWO","2")])
+++ /dev/null
-ONE=1
-TWO=2
+++ /dev/null
-import IO
-import Posix
-
-main =
- openFile "po003.out" WriteMode >>= \ h ->
- runProcess "pwd" [] Nothing (Just "/usr/tmp") Nothing (Just h) Nothing
+++ /dev/null
-import Posix
-import System(ExitCode(..), exitWith)
-
-main =
- forkProcess >>= \ maybe_pid ->
- case maybe_pid of
- Nothing -> raiseSignal floatingPointException
- _ -> doParent
-
-doParent =
- getAnyProcessStatus True False >>= \ (Just (pid, tc)) ->
- case tc of
- Terminated sig | sig == floatingPointException -> forkChild2
- _ -> fail (userError "unexpected termination cause")
-
-forkChild2 =
- forkProcess >>= \ maybe_pid ->
- case maybe_pid of
- Nothing -> exitImmediately (ExitFailure 42)
- _ -> doParent2
-
-doParent2 =
- getAnyProcessStatus True False >>= \ (Just (pid, tc)) ->
- case tc of
- Exited (ExitFailure 42) -> forkChild3
- _ -> fail (userError "unexpected termination cause (2)")
-
-forkChild3 =
- forkProcess >>= \ maybe_pid ->
- case maybe_pid of
- Nothing -> exitImmediately (ExitSuccess)
- _ -> doParent3
-
-doParent3 =
- getAnyProcessStatus True False >>= \ (Just (pid, tc)) ->
- case tc of
- Exited ExitSuccess -> forkChild4
- _ -> fail (userError "unexpected termination cause (3)")
-
-forkChild4 =
- forkProcess >>= \ maybe_pid ->
- case maybe_pid of
- Nothing -> raiseSignal softwareStop
- _ -> doParent4
-
-doParent4 =
- getAnyProcessStatus True True >>= \ (Just (pid, tc)) ->
- case tc of
- Stopped sig | sig == softwareStop -> enoughAlready pid
- _ -> fail (userError "unexpected termination cause (4)")
-
-enoughAlready pid =
- signalProcess killProcess pid >>
- getAnyProcessStatus True True >>= \ (Just (pid, tc)) ->
- case tc of
- Terminated sig | sig == killProcess -> putStr "I'm happy.\n"
- _ -> fail (userError "unexpected termination cause (5)")
-
+++ /dev/null
-I'm happy.
+++ /dev/null
-import Posix
-
-main =
- getEnvVar "TERM" >>= \ term ->
- putStr term >>
- putChar '\n' >>
- setEnvironment [("one","1"),("two","2")] >>
- getEnvironment >>= \ env ->
- print env >>
- putChar '\n' >>
- setEnvVar "foo" "bar" >>
- getEnvironment >>= \ env ->
- print env >>
- putChar '\n' >>
- setEnvVar "foo" "baz" >>
- getEnvironment >>= \ env ->
- print env >>
- putChar '\n' >>
- setEnvVar "fu" "bar" >>
- getEnvironment >>= \ env ->
- print env >>
- putChar '\n' >>
- removeEnvVar "foo" >>
- getEnvironment >>= \ env ->
- print env >>
- putChar '\n' >>
- setEnvironment [] >>
- getEnvironment >>= \ env ->
- print env >>
- putChar '\n'
+++ /dev/null
-import Posix
-
-main =
- epochTime >>= \ start ->
- sleep 5 >>
- let timeleft = 0 in
- epochTime >>= \ finish ->
- putStr "Started: " >>
- print start >>
- putStr "\nSlept: " >>
- print (5 - timeleft) >>
- putStr "\nFinished: " >>
- print finish >>
- putChar '\n'
+++ /dev/null
-import Posix
-
-main =
- installHandler keyboardSignal (Catch doCtrlC) Nothing >>
- getTerminalAttributes stdInput >>= \ ta ->
- case (controlChar ta Interrupt) of
- Nothing -> fixMe ta
- Just x -> continue x
-
-fixMe ta =
- putStr "Oops...no interrupt character?\nI can fix that...\n" >>
- setTerminalAttributes stdInput (withCC ta (Interrupt, '\ETX')) Immediately >>
- getTerminalAttributes stdInput >>= \ ta ->
- case (controlChar ta Interrupt) of
- Nothing -> putStr "...Then again, maybe I can't\n"
- Just x -> continue x
-
-continue x =
- putStr "Press '" >>
- putStr (ccStr x) >>
- putStr "'.\n" >>
- awaitSignal Nothing >>
- putStr "How did I get here?\n"
-
-doCtrlC =
- putStr "Caught an interrupt.\n"
-
-ccStr '\DEL' = "^?"
-ccStr x
- | x >= ' ' = [x]
- | otherwise = ['^', (toEnum (fromEnum x + fromEnum '@'))]
+++ /dev/null
-import Posix
-
-main =
- installHandler realTimeAlarm (Catch alarmclock) Nothing >>
- putStr "Scheduling an alarm in 5 seconds...\n" >>
- scheduleAlarm 5 >>
- putStr "Sleeping one minute.\n" >>
- sleep 60 >>
- putStr "How did I get here?\n"
-
-alarmclock =
- putStr "The alarm went off.\n"
+++ /dev/null
-import Posix
-
-main =
- putStr "Blocking real time alarms.\n" >>
- blockSignals (addSignal realTimeAlarm emptySignalSet) >>
- putStr "Scheduling an alarm in 2 seconds...\n" >>
- scheduleAlarm 2 >>
- putStr "Sleeping 5 seconds.\n" >>
- sleep 5 >>
- getPendingSignals >>= \ ints ->
- putStr "Checking pending interrupts for RealTimeAlarm\n" >>
- print (inSignalSet realTimeAlarm ints) >>
- putChar '\n'
-