瓷器-停止功能不会终止进程

时间:2018-12-15 09:26:02

标签: elixir

我在debian上使用带有goon_linux_amd64驱动程序的Porcelain。 我使用以下命令运行长时间运行的ffmpeg进程:

new_process = Porcelain.spawn("ffmpeg", ["options", "here"])

然后我终止了该过程:

Porcelain.Process.stop(new_process)

最后:

Porcelain.Process.alive?(new_process)
false

问题在于该进程实际上并未终止。我执行ps aux命令时可以看到它。

1 个答案:

答案 0 :(得分:0)

瓷器和Elixir / Erlang Port模块的主要思想是使用stdin和stdout通道处理外部进程。并且,当您调用stop(pid)时,将终止内部进程和stdin / stdout通道(但不终止外部OS进程)。

问题是,在关闭stdin / stdout的情况下,并非所有程序实际上都终止。 在大多数情况下,解决方案是将外部进程包装到包装器中:https://hexdocs.pm/elixir/Port.html#module-zombie-os-processes

与瓷器相同的问题。