Erlang:为什么取消注册进程ID后我的进程仍在运行?

 SOCHUNGKWAN 发布于 2022-12-15 19:50

即使我注销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使流程停止并告诉它停止,这样,当您收到答复时,该流程已经停止。否则,您的退出消息可能需要一些时间才能通过。

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有