proc_lib中所有关于进程相关的方法都是在bif里的spawn相关方法上封装实现的。主要做进程字典'$ancestors' '$initial_call'的初始化和crash报告、退出处理。
一、proc_lib:spawn*相关函数实现
1、proc_lib:spawn* 相关函数通过调用相应的erlang:spawn*方法,执行proc_lib:init_p方法实现。
2、proc_lib_init_p进行'$ancestors' '$initial_call'进程字典初始化,并执行进程要执行的方法,如果执行异常,则执行proc_lib:exit_p处理异常,做crash报告,并执行exit退出。
-
spec
init_p(pid(), [pid()], function())
->
term().
init_p(
Parent
,
Ancestors
,
Fun
)
when
is_function(
Fun
)
->
put('$ancestors', [
Parent
|
Ancestors
]),
{module,
Mod
} = erlang:fun_info(
Fun
, module),
{name,
Name
} = erlang:fun_info(
Fun
, name),
{arity,
Arity
} = erlang:fun_info(
Fun
, arity),
put('$initial_call', {
Mod
,
Name
,
Arity
}),
try
Fun
()
catch