init:stop () semantics

Ulf Wiger <>
Mon Oct 14 11:42:10 CEST 2002


On Sun, 6 Oct 2002, Leonid Timochouk wrote:

>Hello Erlang users,
>
>In the documentation for the "init:stop()" function, it is
>said that "all applications are taken down smoothly".
>However, close analysis of the source code for this
>function (in OTP-R8B-2) suggests that it simply sends
>{'EXIT', kill} to all running processes except "heart" and
>"init" itself. Is it a smooth shutdown? Yet, it seems that
>the "stop()" call-back DOES get invoked for the running
>application -- how is it possible if all processes
>(including the application controller?) are brutally
>killed?


It does look ominous, but if you study the function
init:shutdown_pids/3 --

shutdown_pids(Heart,BootPid,State) ->
    Timer = shutdown_timer(State#state.flags),
    catch shutdown(State#state.kernel,BootPid,Timer,State),
    kill_all_pids(Heart), % Even the shutdown timer.
    kill_all_ports(Heart),
    flush_timout(Timer).

-- you will see that the kill_all_pids/1 call is preceded by
a call to shutdown/4, which gracefully stops the kernel
application. This means shutting down the application
controller, among other things, and the application
controller will (in application_controller:terminate/2)
gracefully shut down all running applications before
terminating itself.

This (synchronous) procedure is guarded by a catch, and
after this, any processes that are left should of course be
mercilessly killed.

/Uffe
-- 
Ulf Wiger, Senior Specialist,
   / / /   Architecture & Design of Carrier-Class Software
  / / /    Strategic Product & System Management
 / / /     Ericsson Telecom AB, ATM Multiservice Networks





More information about the erlang-questions mailing list