即使我注销sts
,我的生成过程也不会停止。如何不使用gen_server停止它?
start() -> case whereis(sts) of undefined -> PidA = spawn(dist_erlang, init,[]), register(sts, PidA), {ok,PidA}; _ -> {ok,whereis(sts)} end. stop() -> case whereis(sts) of undefined -> already_stopped; _ -> unregister(sts), stopped, end.
Soup d'Campb.. 5
使用注销并不会停止该过程。但是,停止进程不会取消注册。因此,与其在此处使用注销,不如使用erlang:exit/2
stop() -> case whereis(sts) of undefined -> already_stopped; Pid -> exit(Pid, normal), % Use whatever exit reason you want stopped end.
话虽如此,您实际上应该使用OTP流程行为(例如gen_server),因为它们使流程管理更加容易。使用OTP流程,您可以改为call
使流程停止并告诉它停止,这样,当您收到答复时,该流程已经停止。否则,您的退出消息可能需要一些时间才能通过。