如何关闭已启动的外部进程?

时间:2016-09-29 14:17:52

标签: elixir

我制作了一个Elixir应用程序(使用GenServer),它在启动时生成一个外部Node.js服务器,并在退出时将其关闭。我已经成功启动了Node.js服务器但我无法将其关闭。我目前正在尝试使用:

所以我的问题是,如何关闭我在Elixir中开始的外部流程?

ElixirForum上的

Relevant Discussion

1 个答案:

答案 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强行杀死(即发送SIGINTSIGTERM)外部程序。