lecture 04
This commit is contained in:
22 files changed
+428
No files matched your search
@@ -0,0 +1,36 @@
|
||||
defmodule Lec4 do
|
||||
def create(n \\ 4) do
|
||||
Enum.map(1..n, fn _ -> parent = self(); spawn(fn -> loop(parent) end) end)
|
||||
end
|
||||
|
||||
def info(pid) when is_pid(pid) do
|
||||
case Process.info(pid, [:trap_exit, :links]) do
|
||||
nil -> {pid, :dead}
|
||||
x -> {pid, x}
|
||||
end
|
||||
end
|
||||
|
||||
def info(pids) when is_list(pids) do
|
||||
Enum.map(pids, &info/1)
|
||||
end
|
||||
|
||||
def trap_exit(pid) do
|
||||
send(pid, :trap_exit)
|
||||
end
|
||||
|
||||
def link(pid, other) do
|
||||
send(pid, {:link, other})
|
||||
end
|
||||
|
||||
defp loop(parent) do
|
||||
receive do
|
||||
:trap_exit ->
|
||||
Process.flag(:trap_exit, true)
|
||||
{:link, other} ->
|
||||
Process.link(other)
|
||||
x ->
|
||||
send(parent, x)
|
||||
end
|
||||
loop(parent)
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user