1
我正在制作一个Elixir应用程序(使用GenServer
),该应用程序在启动时会生成一个外部Node.js服务器,并在退出时将其关闭。我成功地启动了Node.js服务器,但无法关闭它。如何关闭已启动的外部进程?
所以我的问题是,我怎么能关闭一个外部进程:我使用目前尝试我是从Elixir开始的?
Relevant Discussion上ElixirForum
我正在制作一个Elixir应用程序(使用GenServer
),该应用程序在启动时会生成一个外部Node.js服务器,并在退出时将其关闭。我成功地启动了Node.js服务器,但无法关闭它。如何关闭已启动的外部进程?
所以我的问题是,我怎么能关闭一个外部进程:我使用目前尝试我是从Elixir开始的?
Relevant Discussion上ElixirForum
好了,等Unix Signals and Traps做一些研究,并通过多封电子邮件上的Elixir Forum的Erlang Mailing List和讨论会后,事实证明:
当进程退出(端口关闭),产生的程序/端口 应在
STDIN
上得到EOF
。这是进程检测端口何时关闭的“标准”方式:STDIN上的文件结束。
其他程序应STDIN
和关机妥善处理EOF
。这应该适用于大多数程序,但是对于我的Node.js服务器而言,它不会发生。所以,我在我的应用程序和退出手动处理这种情况:
process.stdin.on('end',() => {
console.log("STDIN closed");
process.exit();
});
我仍然认为,应该有一个方法来强制杀死(即,或者发送SIGINT
或SIGTERM
来)从药剂外部程序/二郎。
带有附加goon可执行文件的瓷器库是在一般情况下处理此问题的一种方法。 –
你能否详细说明w/examplesFredtheMagicWonderDog?我怎样才能用'goon'驱动程序发送'SIGTERM'或'SIGINT'? – Sheharyar
goon可执行文件实质上是一个包装器,它接受来自Porcelain库的消息来实现标准信号(以及其他很好的东西)。 –