Erlang(12):进程和错误
进程:
普通进程和系统进程,
连接:
进程之间可以相互连接。如果AB两个进程连接,A挂了的时候,会想B发送一个错误信号。
连接组:
进程P的连接组是芝P相连的一组进程。
监视:
监视和连接很相似,但是单向的。
消息和错误信号:
进程协作的方式是交换消息或错误信号。
错误信号的接收:
{'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发送一个伪造退出信号。,自身并不会退出。