Erlang进程试图杀死自己时挂起
Posted
技术标签:
【中文标题】Erlang进程试图杀死自己时挂起【英文标题】:Erlang process hanging when it tries to kill itself 【发布时间】:2017-08-05 04:02:40 【问题描述】:我正在使用这个脚本运行我的 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 窗口停止响应(我必须从终端关闭窗口)。为什么会这样?
【问题讨论】:
尝试输入stty sane CTRL-J
。如果有帮助,erl
可能会给出一个非零退出代码。
【参考方案1】:
当您调用 exit/1
时,它只会终止 erlang 进程,不会停止 erlang 运行时系统(梁)。由于您在没有外壳的情况下运行,因此您会得到窗口没有响应的行为。如果您从任务管理器或通过 pkill 终止梁进程,您将获得命令行。
一个简单的解决方法是更换
exit(normal)
和
halt()
see doc
【讨论】:
以上是关于Erlang进程试图杀死自己时挂起的主要内容,如果未能解决你的问题,请参考以下文章