Files
2026-09-29 11:55:46 -07:00

37 lines
690 B
Elixir

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