summaryrefslogtreecommitdiff
path: root/erlang/doctor.erl
diff options
context:
space:
mode:
authorGuillermo Ramos2012-05-11 00:49:36 +0200
committerGuillermo Ramos2012-05-11 00:49:36 +0200
commit5d8c20c0a91dbd58a1676581c4374ecb67e639a7 (patch)
tree15ef8efe0a214a088274c1db58408caeff29fdd2 /erlang/doctor.erl
parent67a898893884f229d64886a220ba422dd0d66e78 (diff)
download7l-5d8c20c0a91dbd58a1676581c4374ecb67e639a7.tar.gz
[Erlang] Día 3 (1/2)
Diffstat (limited to 'erlang/doctor.erl')
-rw-r--r--erlang/doctor.erl25
1 files changed, 25 insertions, 0 deletions
diff --git a/erlang/doctor.erl b/erlang/doctor.erl
new file mode 100644
index 0000000..9f69429
--- /dev/null
+++ b/erlang/doctor.erl
@@ -0,0 +1,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().