在erlang shell中输入如下:
第3步为什么会报错,第4步显示Pid似乎还是正常的啊???
对于erlang中的进程来说,
进程做完了自己该做的工作之后就会马上被系统回收,例如第一步中的io:format调用,在输出了信息之后进程就结束了。
除非进程调用被阻塞(比如说进程对应的函数中存在receive)。
如果不相信,可以输入is_process_alive(Pid)来判断进程还是否有效。
如果直接调用register(print, spawn(fun() -> io:format("It's a test2.~n") end)).则能注册成功。但是register的进程与spawn
的进程的生命周期一样。可以通过whereis(print)来判断注册进程是否有效
2014-04-09补充
%% ==============================================
%% 验证erlang进程的生命周期
%% ==============================================
-module(test_spawn).
-compile(export_all).
start1() ->
spawn(?MODULE, fun1, []).
start2() ->
spawn(?MODULE, fun2, []).
start3() ->
spawn(?MODULE, fun3, []).
fun1() -> ok.
fun2() ->
receive
Msg -> Msg
end.
fun3() ->
receive
Msg ->
Msg,
fun3()
end.
运行结果: