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
|
-module(doctor).
-export([loop/0]).
loop() ->
process_flag(trap_exit, true),
receive
die -> exit(doctor);
{monitorize, Process} ->
io:format("Doctor: monitoring ~p.~n", [Process]),
link(Process);
new_mon ->
io:format("Doctor: starting new monitor.~n"),
register(mon, spawn_link(monitor_doctor, loop, [])),
mon ! {mon, self()};
new_rev ->
io:format("Doctor: starting new revolver.~n"),
register(revolver, spawn_link(roulette, loop, []));
{'EXIT', _, mon} ->
io:format("Doctor: oh SWEET JESUS CHRIST, my monitor just DIED!~n"),
self() ! new_mon;
{'EXIT', _, revolver} ->
io:format("Doctor: The shooter died, restarting...~n"),
self() ! new_rev
end,
loop().
|