如何在不中止 erl 的情况下中止 Erlang shell (erl) 中的接收语句?

Posted

技术标签:

【中文标题】如何在不中止 erl 的情况下中止 Erlang shell (erl) 中的接收语句?【英文标题】:How can I abort a receive statement in the Erlang shell (erl) without aborting 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来让它崩溃?

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于如何在不中止 erl 的情况下中止 Erlang shell (erl) 中的接收语句?的主要内容,如果未能解决你的问题,请参考以下文章

c++ 中止覆盖

如何在没有错误消息的情况下中止makefile

您如何中止/结束 Chef 运行?

Git Pre-push 钩子不会在多次检查的情况下中止推送

中止信号的一般原因是啥?

Qt QNetworkAccessManager 中止身份验证