我正在使用此脚本运行我的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窗口停止响应(我必须从终端关闭窗口)。为什么会这样?
答案 0 :(得分:1)
当你调用只能终止erlang进程的exit/1
时,它不会停止erlang运行时系统(beam)。由于您在没有shell的情况下运行,因此您会看到窗口的行为没有响应。如果您从任务管理器或pkill中终止了梁过程,那么您将获得命令行。
一个简单的解决方案是更换
exit(normal)
同
halt()
see doc