BIFsの erlang:processes/0 はPidのリストを返す。また、erlang:process_info/1 はPidを引数に取りプロセス情報のタプルのリストを返す。
lists:map()を使えば全Pidのプロセス情報のリストを取得できる。
1> lists:map(fun erlang:process_info/1, erlang:processes()).
[[{registered_name,init},
{current_function,{init,loop,1}},
{initial_call,{otp_ring0,start,2}},
{status,waiting},
{message_queue_len,0},
{messages,[]},
{links,[<0.4.0>,<0.5.0>,<0.2.0>]},
{dictionary,[]},
{trap_exit,true},
{error_handler,error_handler},
{priority,normal},
{group_leader,<0.0.0>},
{total_heap_size,1364},
{heap_size,987},
{stack_size,2},
{reductions,2786},
{garbage_collection,[{fullsweep_after,65535},{minor_gcs,3}]},
{suspending,[]}],
...
Pidも戻してみたいので、次のようにしてみる。
1> lists:map(fun(X) -> {X, erlang:process_info(X)} end, erlang:processes()).
[{<0.0.0>,
[{registered_name,init},
{current_function,{init,loop,1}},
{initial_call,{otp_ring0,start,2}},
{status,waiting},
{message_queue_len,0},
{messages,[]},
{links,[<0.4.0>,<0.5.0>,<0.2.0>]},
{dictionary,[]},
{trap_exit,true},
{error_handler,error_handler},
{priority,normal},
{group_leader,<0.0.0>},
{total_heap_size,1364},
{heap_size,987},
{stack_size,2},
{reductions,2786},
{garbage_collection,[{fullsweep_after,65535},{minor_gcs,3}]},
{suspending,[]}]},
...
なおerlang:process_info/1はデバッグ用途にのみ使ってね、という記述がある。
通常用途ではerlang:erlang:process_info/2を使って、どの情報を取得するか明示的に指定する。
1> erlang:process_info(list_to_pid("<0.29.0>"), status).
{status,running}
2> erlang:process_info(list_to_pid("<0.29.0>"), [status, memory]).
[{status,running},{memory,142044}]
なおerlang:list_to_pid/1もデバッグ用途orErlang内部限定であり、一般アプリでは使うべきではない、との警告がリファレンスマニュアルには記載されている。