home Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive)

Erlang/HowTo/ListUpProcessInformations

作成日: 2009-08-02 12:39:22   /   last updated at: 2009-08-02 12:52:44
カテゴリ: Erlang 

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内部限定であり、一般アプリでは使うべきではない、との警告がリファレンスマニュアルには記載されている。


original url: https://www.glamenv-septzen.net/view/416