рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ, рднрд╛рдЧ 3

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ ( рднрд╛рдЧ 1 , рднрд╛рдЧ 2 ) рдореЗрдВ, рд╣рдордиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рджреНрд╡рд┐-рджрд┐рд╢рд╛рддреНрдордХ рд╕рдВрдмрдВрдз рдмрдирд╛рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪ рдХреАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдореЙрдирд┐рдЯрд░ рддрдВрддреНрд░ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдФрд░ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ


рдореЙрдирд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп

рдореЙрдирд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА:

рдпрджрд┐ рдЕрд╡рд▓реЛрдХрди рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдореЙрдирд┐рдЯрд░ рдХреЛ рд╕рдВрджреЗрд╢ {'DOWN', рд╕рдВрджрд░реНрдн, рдкреНрд░рдХреНрд░рд┐рдпрд╛, Pid, тАЛтАЛрдХрд╛рд░рдг} рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ
  1. 'DOWN' - рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛ рдЧрдИ рд╣реИ;
  2. рд╕рдВрджрд░реНрдн - рдореЙрдирд┐рдЯрд░ рдкрд░ рд▓рд┐рдВрдХ;
  3. рдкреНрд░рдХреНрд░рд┐рдпрд╛ - рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ (рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдПрд░рд▓реИрдВрдЧ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡реЗ рдХреБрдЫ рдФрд░ рдкреЗрдВрдЪ рдХрд░реЗрдВрдЧреЗ);
  4. рдкрд┐рдж - рдЧрд┐рд░реА рд╣реБрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдореБрдХреНрдд;
  5. рдХрд╛рд░рдг рдХрд╛рд░рдг рд╣реИред


рдПрдХ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдореЙрдирд┐рдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд┐рд░ рдЬрд╛рдПрдЧреА, рдФрд░ рдПрдХ рдореЙрдирд┐рдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рддреБрд░рдВрдд {'DOWN', рд╕рдВрджрд░реНрдн, рдкреНрд░рдХреНрд░рд┐рдпрд╛, Pid, тАЛтАЛрдХрд╛рд░рдг} рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЖрдЗрдП рдЗрд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдПрдВ - рдПрд╕рд╣реЙрд▓ рдЪрд▓рд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

(emacs@aleksio-mobile)1> self(). <0.36.0> (emacs@aleksio-mobile)2> erlang:link(c:pid(0,777,0)). ** exception error: no such process or port in function link/1 called as link(<0.777.0>) (emacs@aleksio-mobile)3> self(). <0.39.0> (emacs@aleksio-mobile)4> flush(). ok (emacs@aleksio-mobile)5> erlang:monitor(process, c:pid(0,777,0)). #Ref<0.0.0.43> (emacs@aleksio-mobile)6> self(). <0.39.0> (emacs@aleksio-mobile)7> flush(). Shell got {'DOWN',#Ref<0.0.0.43>,process,<0.777.0>,noproc} ok (emacs@aleksio-mobile)8> 


рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рд╢реЗрд▓ рдХреЗ рдкрд┐рдб рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЗрд░рд▓реИрдВрдЧ: рд▓рд┐рдВрдХ (c: pid (0.777.0)) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╢реЗрд▓ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдкрд╛рдВрдЪрд╡реАрдВ рдХрдорд╛рдВрдб рдПрд░рд▓реИрдВрдЧ: рдореЙрдиреАрдЯрд░ (рдкреНрд░рдХреНрд░рд┐рдпрд╛, c: pid (0,777,0)) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдЬреЛ рдореЙрдиреАрдЯрд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ Pid = <0.777.0> рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реЗрд▓ рдХрддрд╛рд░ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрджреЗрд╢ {'DOWN', # Ref <0.0.0.43>, рдкреНрд░рдХреНрд░рд┐рдпрд╛, <0.777.0>, noproc} рдЖрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ <0.777 .0> рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд╣реАрдВред

рд╣рдо рдореЙрдирд┐рдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦреЗрдВрдЧреЗред
 -module(testm). -export([start_m/0, stop_m/1, loop/1]). start_m() -> erlang:spawn_monitor(?MODULE, loop, [self()]). stop_m(Ref) -> erlang:demonitor(Ref). loop(Shell) -> receive kill -> exit(kill); reason -> exit("Another reason"); Msg -> Shell ! {get_msg, Msg} end. 


рд╕реНрдкреЙрди_рдореЛрдирд┐рдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рд▓реВрдк рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╢реЗрд▓ рдореЗрдВ) рдПрдХ рдореЙрдирд┐рдЯрд░ рдмрдирд╛рддрд╛ рд╣реИред

 (emacs@aleksio-mobile)2> {Pid, Ref} = testm:start_m(). {<0.43.0>,#Ref<0.0.0.62>} ###  <0.43.0>,    #Ref<0.0.0.62> (emacs@aleksio-mobile)3> Pid ! hello. hello ###   (emacs@aleksio-mobile)4> flush(). Shell got {get_msg,hello} Shell got {'DOWN',#Ref<0.0.0.62>,process,<0.43.0>,normal} ok ###      {get_msg,hello} ###      normal (emacs@aleksio-mobile)5> f(Pid), f(Ref). ok ###  Pid  Ref  ###    (emacs@aleksio-mobile)6> {Pid, Ref} = testm:start_m(). {<0.48.0>,#Ref<0.0.0.77>} (emacs@aleksio-mobile)7> Pid ! kill. kill (emacs@aleksio-mobile)8> flush(). Shell got {'DOWN',#Ref<0.0.0.77>,process,<0.48.0>,kill} ok (emacs@aleksio-mobile)9> f(Pid), f(Ref). ok (emacs@aleksio-mobile)10> {Pid, Ref} = testm:start_m(). {<0.53.0>,#Ref<0.0.0.91>} (emacs@aleksio-mobile)11> Pid ! reason. reason (emacs@aleksio-mobile)12> flush(). Shell got {'DOWN',#Ref<0.0.0.91>,process,<0.53.0>,"Another reason"} ok (emacs@aleksio-mobile)13> testm:stop_m(Ref). true (emacs@aleksio-mobile)14> 


рдкрд╛рдардХреЛрдВ рд╕реЗ рд╕рд╡рд╛рд▓: рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде, рдореЙрдирд┐рдЯрд░ рдХрд╛ рд▓рд┐рдВрдХ рднреА рдирдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдореЙрдирд┐рдЯрд░ рдХреЛ рдЕрдВрдд рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдХреНрдпрд╛ рдкрд┐рдЫрд▓реЗ рд▓рд┐рдВрдХ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╣реАрдВ рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗ рдФрд░ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛рдо рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдордиреЗ рдореЙрдирд┐рдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХреА - рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рд░рд▓ рддрдВрддреНрд░ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрд░реНрд▓рд╛рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣рд░ рдХреЛрдИ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?


1. рдЙрддреНрдХреГрд╖реНрдЯ рдСрдирд▓рд╛рдЗрди рдкреНрд░рд▓реЗрдЦрди ред
2. рдлреНрд░рд╛рдВрд╕реЗрд╕реНрдХреЛ рд╕реЗрд╕рд░рд┐рдиреА рдФрд░ рд╕рд╛рдЗрдорди рдереЙрдореНрдкрд╕рди рджреНрд╡рд╛рд░рд╛ ERLANG рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред
3. RSDN рдкрд░ рдЕрдиреБрдЪреНрдЫреЗрдж: рдПрд░рд▓рд╛рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ ред

Source: https://habr.com/ru/post/In114812/


All Articles