【问题标题】:How can I abort a receive statement in the Erlang shell (erl) without aborting erl?如何在不中止 erl 的情况下中止 Erlang shell (erl) 中的接收语句?
【发布时间】:2021-12-31 16:39:46
【问题描述】:

以下使erl挂起:

$ erl
Erlang/OTP 24 [erts-12.1] [source] [64-bit] [smp:6:6] [ds:6:6:10] [async-threads:1] [jit] [dtrace]

Eshell V12.1  (abort with ^G)
1> receive X -> X end.

按 ctrl-C 会弹出一个选项菜单:

BREAK: (a)bort (A)bort with dump (c)ontinue (p)roc info (i)nfo

但是,我没有发现任何人将我返回到erl 提示符。您是否必须通过选择“(a)bort”然后再次启动erl来让它崩溃?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    答案在你的 shell 提示上方的括号中:

    (abort with ^G)
    

    如果你按 ctrl-G,你会得到一个用户切换命令提示符。你可以在这个提示符下输入h,看看你能做什么:

    User switch command
    --> h
     c [nn]            - connect to job
     i [nn]            - interrupt job
     k [nn]            - kill job
     j                 - list all jobs
     s [shell]         - start local shell
     r [node [shell]]  - start remote shell
     q                 - quit erlang
     ? | h             - this message
    

    让我们列出工作:

    --> j
      1* {shell,start,[init]}
    

    这是运行您的receive 的shell。你可以用k杀死它,然后j显示没有作业在运行,所以然后使用s启动一个新的shell,j然后显示,然后使用c连接到那个新的外壳:

    --> k 1
    --> j
    --> s
    --> j
      2* {shell,start,[]}
    --> c 2
    Eshell V12.1  (abort with ^G)
    1>
    

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 2010-11-26
      • 2020-12-27
      • 2018-02-04
      • 2012-03-12
      • 2020-06-16
      • 1970-01-01
      • 2023-02-26
      • 2010-12-31
      相关资源
      最近更新 更多