# os/run-async
Run a command off-thread on the shared per-runtime executor pool and return
a Future resolving to the same `%{ :status :stdout :stderr }` map that
`os/run` returns. Output is buffered and delivered at completion; a hung
command pins a pool thread, so use `os/run` for a simpler blocking call.
## Syntax
[os/run-async $command @args]
## Parameters
- `$command` — executable name or path (string)
- `@args` — remaining arguments; strings pass through, other values are
formatted. At most 64 args are used.
## Examples
[await [os/run-async "sh" "-c" "echo out; echo err >&2"]] # → %{ :status 0 :stdout "out" :stderr "err" } [await [os/run-async "sh" "-c" "exit 3"]] # → %{ :status 3 :stdout "" :stderr "" } [await [os/run-async "no-such-tool"]] # → %Err{:message "os/run-async: FileNotFound"}
## Returns
A `Future`; `[await $fut]` yields `%{ :status N :stdout "..." :stderr "..." }`
with a trailing newline trimmed. Spawn/exec failures resolve to
`%Err{:message}`. `%Err` is returned immediately (not as a Future) for a
missing command name, missing VM/runtime context, or an executor that cannot
start.
## See Also
`os/run`, `os/shell`, `await`, `future?`