Erlang进程在尝试自杀时挂起

时间:2017-03-14 17:13:47

标签: c bash erlang

我正在使用此脚本运行我的erlang进程

#!/bin/sh
stty -f /dev/tty icanon raw
erl -pa ./ -run thing start -run init -noshell
stty echo echok icanon -raw

我的Erlang流程:

-module(thing).
-compile(export_all).

process(<<27>>) ->
  io:fwrite("Ch: ~w", [<<27>>]),
  exit(normal);
process(Ch) ->
  io:fwrite("Ch: ~w", [Ch]),
  get_char().

get_char() ->
    Ch = io:get_chars("p: ", 1),
    process(Ch).

start() ->
    io:setopts([{binary, true}]),
    get_char().

当我运行./invoke.sh时,我按下按键,看到字符按预期打印。当我点击逃生时,shell窗口停止响应(我必须从终端关闭窗口)。为什么会这样?

1 个答案:

答案 0 :(得分:1)

当你调用只能终止erlang进程的exit/1时,它不会停止erlang运行时系统(beam)。由于您在没有shell的情况下运行,因此您会看到窗口的行为没有响应。如果您从任务管理器或pkill中终止了梁过程,那么您将获得命令行。 一个简单的解决方案是更换 exit(normal)halt() see doc