Erlang笔记

本文详细介绍了Erlang中进程链接的概念,包括系统进程如何捕获链接进程的退出消息。同时,讨论了ETS表的创建与管理,强调了表名与记录名冲突的问题及解决方案。另外,讲解了PID的使用、gen_server的行为和停止规则,以及gen_tcp:controlling_process的用法。最后提到了监控树和ETS表的所有权转让策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程链接:
通过调用process_flag(trap_exit,true)来把一个普通进程转为系统进程,系统进程能捕获它所链接的进程的退出消息。

进程A与进程B链接,进程B调用process_flag(trap_exit,true),进程B为系统进程,进程A正常常退出时,进程B捕获到并处理A退出的消息,进程B继续正常运行。
进程A与进程B链接,进程B调用process_flag(trap_exit,true),进程B为系统进程,进程A异常退出时,进程B捕获到并处理A退出的消息,进程B继续正常运行。


进程A与进程B链接,进程B调用process_flag(trap_exit,false),进程B不是系统进程,进程A正常退出时,进程B不会捕获到A的退出消息,进程B继续正常运行。
进程A与进程B链接,进程B调用process_flag(trap_exit,false),进程B不是系统进程,进程A异常退出时,进程B不会捕获到A的退出消息,进程B也退出了。

ets:
如果已经定义了一个记录:-record(player,{id,name,age}).
如果再定义一个ets用于保存玩家信息:ets:new(player,[set,protected,named_table,{keypos,#player.id}]).
编译文件的时候没问题,程序运行的时候在新建ets表player的时候会报错(** exception exit: badarg in function  ets:new/2)。
解决方法:表名和记录名冲突了,随便改一个。

pid:
{ok,Pid} = gen_server:start_link(Name,Module,[],[]).调用此句的时候,会把Pid注册到名字Name,所以不能再次注册register(otherName,Pid).
whereis(name)的参数是进程注册的名字,返回的是Pid。
is_pid(P).返回的是true/false.
给pid发送消息不会有任何错误,哪怕该进程不存在;但是,当注册的进程不存在时,通过注册名给它发消息会出错。 ->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值