如何在Elixir中启动操作系统进程

时间:2014-08-16 17:35:53

标签: elixir

在Elixir中启动操作系统流程的最佳方法是什么?

我希望能够在启动时为其传递不同的参数, 捕获它的PID,然后杀死它。

1 个答案:

答案 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"])