【发布时间】:2014-08-18 19:38:27
【问题描述】:
在 Elixir 中启动 OS 进程的最佳方式是什么?
我希望能够在启动时向它传递不同的参数, 捕获它的 PID 然后杀死它。
【问题讨论】:
-
同时检查 System.cmd
-
@OnorioCatenacci System.cmd 在 Windows 上似乎不适合我
标签: elixir
在 Elixir 中启动 OS 进程的最佳方式是什么?
我希望能够在启动时向它传递不同的参数, 捕获它的 PID 然后杀死它。
【问题讨论】:
标签: elixir
您可以使用 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"])
【讨论】:
args?