【问题标题】:How to terminate process with loop function?如何使用循环功能终止进程?
【发布时间】:2011-09-06 03:57:45
【问题描述】:

我写了一个模块,它有一个循环功能,该功能将永远发送udp数据包。我在 erlang 控制台中调试程序,我想知道如何关闭 UDP 套接字? 否则 erlang 将始终在控制台中打印调试消息。谢谢!

start() ->
  {ok, Sock} = gen_udp:open(0, []),
  send(Sock).

send(Sock) ->
  gen_udp:send(Sock, "127.0.0.1", 3211, "hello world"),
  timer:sleep(5000),
  send(Sock). 

【问题讨论】:

  • 当进程不是该套接字的“控制进程”时,关闭该套接字是相当困难的。gen_udp 和 gen_tcp 模块可能有更多信息。一个进程要关闭它,它必须是那个 Socket 的控制进程。

标签: erlang


【解决方案1】:

要终止进程,您可以

退出(Pid,杀死)。

如果你有一个接收循环,你总是可以有一个存在循环的关闭消息。

接收 关机-> 什么都没有。

【讨论】:

    【解决方案2】:

    这里有两点需要考虑

    1. 如果进程是 插座。在这种情况下,您可以 直接使用 gen_udp:close(Sock)。
    2. 如果进程不是套接字的所有者,则使用 gen_udp:controlling_process(Sock,Pid) 其中 Pid 是进程的进程 ID 套接字的新所有者。现在你可以 从此使用 gen_udp:close(Sock) 过程。 http://www.erlang.org/doc/man/gen_udp.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2013-06-17
      • 1970-01-01
      • 2021-08-03
      • 2017-08-17
      • 1970-01-01
      • 2022-07-18
      相关资源
      最近更新 更多