# Spawn a child process (/docs/guides/process/spawn)

<!-- agent-signals: reading_time_min: 1 · est_tokens: 164 · updated: 2026-07-28 -->
Related: [Parse command-line arguments](/docs/guides/process/argv.md), [Listen for CTRL+C](/docs/guides/process/ctrl-c.md), [Spawn a child process and communicate using IPC](/docs/guides/process/ipc.md), [Get the process uptime in nanoseconds](/docs/guides/process/nanoseconds.md), [Listen to OS signals](/docs/guides/process/os-signals.md), [Read stderr from a child process](/docs/guides/process/spawn-stderr.md)

Use [`Bun.spawn()`](/runtime/child-process) to spawn a child process.

```ts
const proc = Bun.spawn(["echo", "hello"]);

// await completion
await proc.exited;
```

***

The second argument is a configuration object.

```ts
const proc = Bun.spawn(["echo", "Hello, world!"], {
  cwd: "/tmp",
  env: { FOO: "bar" },
  onExit(proc, exitCode, signalCode, error) {
    // exit handler
  },
});
```

***

By default, `proc.stdout` is a `ReadableStream` of the child process's `stdout`.

```ts
const proc = Bun.spawn(["echo", "hello"]);

const output = await proc.stdout.text();
output; // => "hello\n"
```

***

See [Child processes](/runtime/child-process).
