Erlang(12):進程和錯誤

進程:spa

普通進程和系統進程,orm

鏈接:進程

進程之間能夠相互鏈接。若是AB兩個進程鏈接,A掛了的時候,會想B發送一個錯誤信號。it

鏈接組:class

進程P的鏈接組是芝P相連的一組進程。erlang

監視:demo

監視和鏈接很類似,可是單向的。process

消息和錯誤信號:消息

進程協做的方式是交換消息或錯誤信號。錯誤

錯誤信號的接收:

{'EXIT', Pid, Why} 

當普通進程收到錯誤消息時,若是退出緣由不是normal,該進程就會終止,並向它的鏈接組廣播一個退出信號

顯式錯誤信號

任何執行exit(Why)的進程都會終止

exit(Pid,Why),發送一個虛假錯誤信號
不可捕捉的退出信號

系統進程收到摧毀信號(kill signal)時會終止。摧毀信號會繞過常規的錯誤信號處理機制。


建立進程並創建鏈接

-spec spawn_link(Fun)->Pid

-spec spawn_link(Mod, Fnc, Args)->Pid

新進程掛掉會波及舊進程


建立進程並監視

-spec spawn_monitor(Fun)->Pid

-spec spawn_monitor(Mod, Fun, Args)->{Pid, Ref}

子進程掛了,會向父進程發送消息{‘DOWN’,  Ref, process, Pid, Why}。可是父進程不會掛掉。


-spec process_flag(trap_exit, true)

把當前進程轉變成系統進程,系統進程是一種可以接收和處理錯誤信號的進程。


-spec link(Pid)->true

建立一個與進程Pid的雙向鏈接


-spec unlink(Pid)->true 

移除鏈接


-spec erlang:monitor(process, Item)->Ref

設立一個監視,Item能夠是進程的Pid,也能夠是它的註冊名稱。


-spec demonitor(Ref)->true

移除監視


-spec exit(Why)-> none()

終止進程


-spec exit(Pid, Why)->true

向進程Pid發送一個僞造退出信號。,自身並不會退出。

相關文章
相關標籤/搜索