2013-04-09 9 views
1

내가 erl에 몇 가지 간단한 프로세스와 일하고 있어요 말 : 나는 f(Pid).을 수행 할 때Erlang : Erl의 Pid를 f()하면 어떻게됩니까?

1> Fun = fun(F) -> F(F) end. 
#Fun<erl_eval.6.82930912> 
2> Pid = spawn(fun() -> Fun(Fun) end). 
<0.178.0> 
3> f(Pid). 

어떻게됩니까? 프로세스가 종료 되었습니까, 아니면 방금 내 참조를 잃어 버렸습니까?

답변

3

에 따르면 documentationf(Pid)은 변수 Pid의 바인딩을 제거하므로 프로세스가 중지되지 않습니다.

다음과 같이 테스트 할 수 있습니다. myserver이라는 gen_server가 emacs erlang 모드에서 제공하는 골격을 기반으로한다고 가정합니다.

1> {ok, Pid} = myserver:start_link(). 
{ok,<0.39.0>} 
2> f(Pid). 
ok 
3> gen_server:call(pid(0,39,0), mycall). 
ok 
4> gen_server:call(myserver, mycall). 
ok 

우리가 우리는 여전히 (우리의 경우 모듈 이름)의 PID 또는 등록하는 동안 사용되는 원자를 사용하여 프로세스를 문의 할 수 있습니다 f(Pid)을했다하더라도 볼 수 있듯이.

+1

감사! 바인딩을 제거 할 때 어떤 일이 발생하는지에 대한 설명서가 모호한 것 같지만 예제를 통해 명확하게 알 수 있습니다. – 2rs2ts

+2

@agarrett 프로세스는 절대로 참조가 없으므로 사라지지 않습니다. 그들은 기능을 완료 할 때 죽거나, 오류가 발생하거나 다른 프로세스에 의해 사망합니다. – rvirding