除了 ctrl-C 之外的另一种退出 IEX 的方法

Another way to exiting IEX other than ctrl-C

我知道我们可以使用 control-C 退出 IEX 控制台。我很好奇是否有一个命令可以在控制台中输入也可以做同样的事情。

看起来像

 System.halt

也有效。

我一直以为ctrl-G 其次是 q 退出 是退出 iex shell.

的官方方式

请参阅 IEx 文档“section on the BREAK menu,其中还显示了如何在备用 shell 等之间切换。

我可以想到 3 种退出 IEx 的方法 shell:

  1. 提到的 <ctrl-c> 命中两次或一次,然后是 q,然后是 <enter>
  2. <ctrl-g> 然后 q + <enter>,
  3. 最后 System.halt,

但是System.halt和其他的有区别。

System.halt停止 Erlang 运行时”而其他人只是“退出 shell ”。

当您只有一个 shell 会话 运行 或会话未附加到单独的运行时时,两种方式都会产生相同的结果。 但是如果你有一个会话连接到一个单独的运行时,例如via iex --remsh (remote shell) 然后 运行 System.halt 将停止运行时,因此使两个 shell 进程/运行时终止。只是退出 shell(通过方法 1. 或 2.)不会停止它所连接的运行时。

结论:如果您将 shell 连接到其他运行时,则知道 System.halt 将停止您连接的运行时。如果您不想这样做,请使用 <ctrl-c>.

更新:最近我也发现了 <ctrl-\>。您可以在 this article:

中阅读更多相关信息

What I didn’t know is that you can exit the shell by sending Ctrl-. The shell will exit immediately. As far as I know, it has the same effect as aborting the shell in the Break command, it doesn’t affect remote nodes and it also works outside of iex (for example, you can use to terminate your tests).

  1. 断开与shell的连接并停止当前节点。在大多数情况下,这就是您所需要的。

    1.1。 Ctrl+\ - 退出 Erlang shell 的标准方法。请参阅“4.4 如何退出 Erlang shell?”在 Erlang -- Getting Started.

    1.2。 Ctrl+C, a, Enter - 通过 Break 菜单的 (a)bort 命令。

    1.3。 Ctrl+C, Ctrl+C - 看起来像是 Break 菜单的未记录功能。

    1.4。 Ctrl+G, q, Enter - 通过 User Switch menu (see Erlang -- shell -- JCL Modeq(退出 erlang)命令。

    注意: 如果您已使用 iex --remsh 连接到 远程节点 (请参阅 iex --helpIEx -- Remote Shells).

  2. 关闭您连接的节点。

    2.1。 System.halt - quick and dirty shut down. The runtime system exits with status code 0 (clean exit without errors). You can also call System.halt(:abort) to abort with core dump. Same as :erlang.halt.

    2.2。 :init.stop (System.stop in future versions) - clean shutdown. All applications are taken down smoothly, all code is unloaded, and all ports are closed before the system terminates by calling halt(Status).

    注意: 如果您已使用 shell 连接到远程 shell,则 您的 shell 还活着 =16=].

请注意,如果 Erlang 以忽略中断、+Bi、系统标志启动,则所有这些选项都将被禁用:iex --erl +Bi(这可能很有用,例如,当 运行 受限 shell).有关详细信息,请参阅 Erlang -- erl

输入shell :c.q() 开心