Elixir 如何关闭已启动的外部进程?
我正在制作一个Elixir应用程序(使用Elixir 如何关闭已启动的外部进程?,elixir,Elixir,我正在制作一个Elixir应用程序(使用GenServer),它在启动时生成一个外部Node.js服务器,并在退出时关闭它。我已成功启动Node.js服务器,但无法将其关闭。我目前已尝试使用: 及 及 甚至还有包裹 所以我的问题是,如何关闭我在Elixir中启动的外部进程? 在ElixirForum上好的,在研究并浏览了许多关于的电子邮件和讨论之后,结果是: 当进程退出(端口关闭)时,生成的程序/端口 应在其STDIN上获得EOF。这是进程检测端口何时关闭的“标准”方式:STDIN上的文件
GenServer
),它在启动时生成一个外部Node.js服务器,并在退出时关闭它。我已成功启动Node.js服务器,但无法将其关闭。我目前已尝试使用:
- 及
- 及
- 甚至还有包裹
在ElixirForum上好的,在研究并浏览了许多关于的电子邮件和讨论之后,结果是: 当进程退出(端口关闭)时,生成的程序/端口 应在其
STDIN
上获得EOF
。这是进程检测端口何时关闭的“标准”方式:STDIN上的文件结束
另一个程序应该在STDIN
上处理EOF
,并优雅地关闭。这应该适用于大多数程序,但在my Node.js服务器上,没有发生。因此,我必须在我的应用程序中手动处理此情况并退出:
process.stdin.on('end', () => {
console.log("STDIN closed");
process.exit();
});
我仍然认为应该有一种方法来强制杀死Elixir/Erlang的外部程序(即发送
SIGINT
或SIGTERM
)好的,因此在对进行了一些研究并浏览了许多关于的电子邮件和讨论之后,结果是:
当进程退出(端口关闭)时,生成的程序/端口
应在其STDIN
上获得EOF
。这是进程检测端口何时关闭的“标准”方式:STDIN上的文件结束
另一个程序应该在STDIN
上处理EOF
,并优雅地关闭。这应该适用于大多数程序,但在my Node.js服务器上,没有发生。因此,我必须在我的应用程序中手动处理此情况并退出:
process.stdin.on('end', () => {
console.log("STDIN closed");
process.exit();
});
我仍然认为应该有一种方法来强制杀死Elixir/Erlang的外部程序(即发送
SIGINT
或SIGTERM
)。带有附加goon可执行文件的陶瓷库是在一般情况下处理此问题的一种方法。您能否详细说明w/examples@FredtheMagicWonderDog?如何使用goon
驱动程序发送SIGTERM
或SIGINT
?goon可执行文件本质上是一个包装器,它接受来自陶瓷库的消息以实现标准信号(以及许多其他好东西)。我实际上已经尝试过了。不起作用。我使用了ceral.Process.signal(proc,sig_id)
和用于INT、QUIT和kill的信号id。在一般情况下,使用附加goon可执行文件的ceral库是处理此问题的一种方法。您能详细说明w/examples@fredthemagicwonderlog吗?如何使用goon
驱动程序发送SIGTERM
或SIGINT
?goon可执行文件本质上是一个包装器,它接受来自陶瓷库的消息以实现标准信号(以及许多其他好东西)。我实际上已经尝试过了。不起作用。我使用了ceral.Process.signal(proc,sig_id)
和INT、QUIT和KILL的信号id