title: How do supervisor processes monitor processes? Can the same be done on the JVM?
body: <p>Erlang fault tolerance (as I understand it) includes the use of supervisor processes to keep an eye on worker processes, so if a worker dies the supervisor can start up a new one.</p>
  
  <p>How does Erlang do this monitoring, especially in a distributed scenario?  How can it be sure the process has really died?  Does it do heart beats?  Is something built into the runtime environment?  What if a network cable is unplugged - does it assume the other processes have died if it cannot communicate with them? etc.</p>
  
  <p>I was thinking about how to achieve the same fault tolerance etc claimed by Erlang in the JVM (in say Java or Scala).  But I was not sure if it required support built into the JVM to do it as well as Erlang.  I had not come across a definition of how Erlang does it yet though as a point of comparison.</p>