2016-09-29 68 views
1

我正在制作一个Elixir应用程序(使用GenServer),该应用程序在启动时会生成一个外部Node.js服务器,并在退出时将其关闭。我成功地启动了Node.js服务器,但无法关闭它。如何关闭已启动的外部进程?

所以我的问题是,我怎么能关闭一个外部进程:我使用目前尝试我是从Elixir开始的?


Relevant Discussion上ElixirForum

回答

0

好了,等Unix Signals and Traps做一些研究,并通过多封电子邮件上的Elixir ForumErlang Mailing List和讨论会后,事实证明:

当进程退出(端口关闭),产生的程序/端口 应在STDIN上得到EOF。这是进程检测端口何时关闭的“标准”方式:STDIN上的文件结束。

其他程序应STDIN和关机妥善处理EOF这应该适用于大多数程序,但是对于我的Node.js服务器而言,它不会发生。所以,我在我的应用程序和退出手动处理这种情况:

process.stdin.on('end',() => { 
    console.log("STDIN closed"); 
    process.exit(); 
}); 

我仍然认为,应该有一个方法来强制杀死(即,或者发送SIGINTSIGTERM来)从药剂外部程序/二郎。

+0

带有附加goon可执行文件的瓷器库是在一般情况下处理此问题的一种方法。 –

+0

你能否详细说明w/examplesFredtheMagicWonderDog?我怎样才能用'goon'驱动程序发送'SIGTERM'或'SIGINT'? – Sheharyar

+0

goon可执行文件实质上是一个包装器,它接受来自Porcelain库的消息来实现标准信号(以及其他很好的东西)。 –