Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何关闭已启动的外部进程?_Elixir - Fatal编程技术网

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

Elixir 如何关闭已启动的外部进程?,elixir,Elixir,我正在制作一个Elixir应用程序(使用GenServer),它在启动时生成一个外部Node.js服务器,并在退出时关闭它。我已成功启动Node.js服务器,但无法将其关闭。我目前已尝试使用: 及 及 甚至还有包裹 所以我的问题是,如何关闭我在Elixir中启动的外部进程? 在ElixirForum上好的,在研究并浏览了许多关于的电子邮件和讨论之后,结果是: 当进程退出(端口关闭)时,生成的程序/端口 应在其STDIN上获得EOF。这是进程检测端口何时关闭的“标准”方式:STDIN上的文件

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

  • 甚至还有包裹
所以我的问题是,如何关闭我在Elixir中启动的外部进程?



在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