在Elixir中启动操作系统流程的最佳方法是什么?
我希望能够在启动时为其传递不同的参数, 捕获它的PID,然后杀死它。
答案 0 :(得分:14)
您可以使用端口来实现此目的:
defmodule Shell do
def exec(exe, args) when is_list(args) do
port = Port.open({:spawn_executable, exe}, [{:args, args}, :stream, :binary, :exit_status, :hide, :use_stdio, :stderr_to_stdout])
handle_output(port)
end
def handle_output(port) do
receive do
{^port, {:data, data}} ->
IO.puts(data)
handle_output(port)
{^port, {:exit_status, status}} ->
status
end
end
end
iex> Shell.exec("/bin/ls", ["-la", "/tmp"])