Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | structure List = |
2 | struct | |
3 | open List | |
4 | ||
5 | fun foreach (l, f) = app f l | |
6 | end | |
7 | structure Process = Posix.Process | |
8 | open Process Posix.Signal MLton.Signal | |
9 | ||
10 | fun print s = let open TextIO | |
11 | in output (stdErr, s) | |
12 | ; output (stdErr, "\n") | |
13 | end | |
14 | ||
15 | val sleep = sleep o Time.fromSeconds | |
16 | ||
17 | val _ = | |
18 | List.foreach | |
19 | ([(hup, "Got a hup."), | |
20 | (int, "You can't int me you loser."), | |
21 | (term, "Don't even try to term me.")], | |
22 | fn (signal, msg) => | |
23 | setHandler (signal, Handler.simple (fn () => print msg))) | |
24 | ||
25 | val _ = | |
26 | case fork () of | |
27 | NONE => | |
28 | let 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 |