Import Upstream version 20180207
[hcoop/debian/mlton.git] / regression / signals3.sml
CommitLineData
7f918cf1
CE
1structure List =
2 struct
3 open List
4
5 fun foreach (l, f) = app f l
6 end
7structure Process = Posix.Process
8open Process Posix.Signal MLton.Signal
9
10fun print s = let open TextIO
11 in output (stdErr, s)
12 ; output (stdErr, "\n")
13 end
14
15val sleep = sleep o Time.fromSeconds
16
17val _ =
18 case fork () of
19 NONE =>
20 let
21 val _ =
22 List.foreach
23 ([(hup, "Got a hup."),
24 (int, "You can't int me you loser."),
25 (term, "Don't even try to term me.")],
26 fn (signal, msg) =>
27 setHandler (signal, Handler.simple (fn () => print msg)))
28 fun loop' () = loop' ()
29 in loop' ()
30 end
31 | SOME pid =>
32 let
33 fun signal s = Process.kill (K_PROC pid, s)
34 in
35 sleep 1
36 ; print "sending 1"
37 ; List.foreach ([hup, int, term], signal)
38 ; sleep 3
39 ; print "sending 2"
40 ; List.foreach ([hup, int], signal)
41 ; sleep 3
42 ; print "sending 3"
43 ; signal kill
44 ; wait ()
45 end