我在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命令时可以看到它。
答案 0 :(得分:0)
瓷器和Elixir / Erlang Port
模块的主要思想是使用stdin和stdout通道处理外部进程。并且,当您调用stop(pid)
时,将终止内部进程和stdin / stdout通道(但不终止外部OS进程)。
问题是,在关闭stdin / stdout的情况下,并非所有程序实际上都终止。 在大多数情况下,解决方案是将外部进程包装到包装器中:https://hexdocs.pm/elixir/Port.html#module-zombie-os-processes
与瓷器相同的问题。