Uncertain death

Dominic Williams <>
Thu Nov 17 23:31:35 CET 2005


Hello,

The following program seems to me to indicate that when a 
processes gets killed, there is, for a brief moment, 
contradictory information about its state. Specifically, the 
information returned by processes() seems to lag behind that 
given by is_process_alive().


%%% death.erl

-module (death).
-export ([run/0, server/0]).

run() ->
     Pid = spawn (?MODULE, server, []),
     exit (Pid, kill),
     report (Pid),
     timer:sleep(1000),
     report (Pid).

report (Pid) ->
     io:fwrite("~p alive: ~p; member of processes(): ~p~n",
               [Pid, is_process_alive (Pid),
                lists:member(Pid, processes())]).

server () ->
     receive
         hello ->
             server();
         stop ->
             bye
     end.

%%% end death.erl

1> c("/Users/dodo/tmp/death", [{outdir, "/Users/dodo/tmp/"}]).
{ok,death}
2> death:run().
<0.35.0> alive: false; member of processes(): true
<0.35.0> alive: false; member of processes(): false
ok

Same result under MacOS/R9C and WinXP/R10B

Regards,

Dominic Williams
http://www.dominicwilliams.net

----



More information about the erlang-questions mailing list