Get pids for each beam application in Elixir
In Elixir, it's hard to determine what pids belong to what applications just by using Process.info
iex> pid(0,45,0) |> Process.info
[
current_function: {:application_master, :main_loop, 2},
initial_call: {:proc_lib, :init_p, 5},
status: :waiting,
message_queue_len: 0,
links: [#PID<0.46.0>, #PID<0.43.0>],
dictionary: [
"$ancestors": [#PID<0.44.0>],
"$initial_call": {:application_master, :init, 4}
],
trap_exit: true,
error_handler: :error_handler,
priority: :normal,
group_leader: #PID<0.45.0>,
total_heap_size: 376,
heap_size: 376,
stack_size: 7,
reductions: 49,
garbage_collection: [
max_heap_size: %{error_logger: true, kill: true, size: 0},
min_bin_vheap_size: 46422,
min_heap_size: 233,
fullsweep_after: 65535,
minor_gcs: 0
],
suspending: []
]
With the above output, I can't tell what application this is!
I can use the :running
key of Erlang's :application.info
to get a map of applications to pids.
iex> :application.info[:running]
[
logger: #PID<0.93.0>,
iex: #PID<0.85.0>,
elixir: #PID<0.79.0>,
compiler: :undefined,
stdlib: :undefined,
kernel: #PID<0.45.0>
]
Oh ok, pid(0,45,0)
is the Kernel
application.