我制作了一个Elixir应用程序(使用GenServer
),它在启动时生成一个外部Node.js服务器,并在退出时将其关闭。我已经成功启动了Node.js服务器但我无法将其关闭。我目前正在尝试使用:
所以我的问题是,如何关闭我在Elixir中开始的外部流程?
ElixirForum上的答案 0 :(得分:0)
好的,所以在对Unix Signals and Traps进行一些研究并浏览了Erlang Mailing List上的许多电子邮件以及对Elixir Forum的讨论之后,事实证明:
退出进程(端口关闭)时,生成的程序/端口 应该在其
EOF
上获得STDIN
。这是"标准"进程检测端口何时关闭的方式:STDIN上的文件结束。
其他程序应该在EOF
上处理STDIN
并正常关闭。这应该适用于大多数程序,但对于我的Node.js服务器,它没有发生。所以我不得不在我的应用程序中手动处理这个案例并退出:
process.stdin.on('end', () => {
console.log("STDIN closed");
process.exit();
});
我仍然认为应该有办法从Elixir / Erlang强行杀死(即发送SIGINT
或SIGTERM
)外部程序。