<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Doing exit(Pid, kill) sends an exit signal, of value kill, to the
process so it should be scheduled in the same way as "normal" exit
signals. Generally I think you should be careful if you start special
casing various things as you can get unexpected behavious.<br>
<br>
Robert<br>
<br>
Ulf Wiger (AL/EAB) wrote:
<blockquote
 cite="midD4ADC896EC3F5948A9D3899986CEB9DE0271EAC0@esealmw115.eemea.ericsson.se"
 type="cite">
  <pre wrap="">When you send an exit signal to a process,
it is scheduled in order to receive it.
This goes for 'kill' messages as well, even
though you'd think that they could be 
killed right away by the runtime system.

/Uffe

  </pre>
  <blockquote type="cite">
    <pre wrap="">-----Original Message-----
From: <a class="moz-txt-link-abbreviated" href="mailto:owner-erlang-questions@erlang.org">owner-erlang-questions@erlang.org</a> 
[<a class="moz-txt-link-freetext" href="mailto:owner-erlang-questions@erlang.org">mailto:owner-erlang-questions@erlang.org</a>] On Behalf Of 
Dominic Williams
Sent: den 17 november 2005 23:32
To: '<a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>'
Subject: Uncertain death

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
<a class="moz-txt-link-freetext" href="http://www.dominicwilliams.net">http://www.dominicwilliams.net</a>

----

    </pre>
  </blockquote>
  <pre wrap=""><!---->
  </pre>
</blockquote>
</body>
</html>