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

cyb*_*dot 4 elixir

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

我期望能够在启动时传递不同的参数,捕获其PID然后将其杀死.

bit*_*ker 14

您可以使用Ports来实现此目的:

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"])
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,Porcelain使用了Ports.如果你计划使用Ports,这绝对是你要走的路,但知道如何在较低级别工作也很重要:). (5认同)