[erlang-questions] supervisor behaves differently if started from command line
Kevin
q2h46uw02@REDACTED
Tue Feb 17 14:31:55 CET 2009
Hello, I'll post the relevant two files below. One is a supervisor and
the other a gen_server, and both are barely anything more than slightly
modified skeletons from the erlang emacs mode.
When I run the supervisor from the command line "erl -s mysup" I find
that all the startup and init functions are called, but
then there is nothing there, whereis(mygen) returns undefined and a cal
to mygen:doit() returns a noproc error.
However, when I run this from the erlang shell I have no problems
Eshell V5.6.5 (abort with ^G)
1> mysup:start().
{ok,<0.32.0>}
2> whereis(mygen).
<0.33.0>
3> mygen:doit("asdf").
in handle call, request is "asdf"
ok
4>
When I put in io:format debug statements in, I find that all the same
functions are called, its just that starting from the command line seems
to be shooting blanks.
I hope this is not because I decided to decapitate my code of the
"application" behavior. I did that because its just too many layers, I
like to keep
things simple. Is it ok to use a supervisor at the top? I think it
makes more sense if you are starting things with a unix style init script
Thanks!
=== mysup.erl =========================================
-module(mysup).
-behaviour(supervisor).
-export([start/0, start_link/0]).
-export([init/1]).
-define(SERVER, ?MODULE).
start() ->
start_link().
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
init([]) ->
AChild = {mygen,{mygen,start_link,[]},
permanent,2000,worker,[]},
{ok,{{one_for_one,10,10}, [AChild]}}.
=== mygen.erl ===================================
-module(mygen).
-behaviour(gen_server).
-export([start_link/0, doit/1]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-record(state, {}).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) ->
{ok, #state{}}.
doit(Text) ->
gen_server:call(?MODULE, Text).
handle_call(Request, _From, State) ->
io:format("in handle call, request is ~p~n", [Request]),
{reply, ok, State}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
More information about the erlang-questions
mailing list