---
title: ProcessExit
description: What wait() resolves to.
---

What `wait()` resolves to.

`exitCode` and nothing else on purpose, matching the harness contract's
`wait(): PromiseLike<{ exitCode: number }>`. A caller wanting the signal, the truncation
flag, or the buffered output polls \[`crate::exec::ExecHandle`] instead, which answers with
the whole record.

## Properties

### exitCode?

```ts
optional exitCode?: number;
```

The child's exit status.

**`null` when the child died to a signal**, which is where this shape and the harness's
`{ exitCode: number }` genuinely differ, and it is deliberate. A signal death has no
exit code, and the two available lies are `0` (a killed build reported as passing) and
`128 + signo` (a number the daemon never published, indistinguishable from a child that
really exited with it). A wrapper that must produce a number can pick one at its own
boundary; this handle will not pick for it.

***

### signal?

```ts
optional signal?: number;
```

The signal that killed the child, when one did. Not part of the harness shape; here
because it is the only thing that makes a `null` exit code actionable.

***

### timedOut

```ts
timedOut: boolean;
```

True when the remote execution deadline expired.

## Provenance

This page is generated from `bindings/microvms-js/index.d.ts` by TypeDoc 0.28.20 and typedoc-plugin-markdown 4.13.1, run from `site/scripts/gen-reference.mjs` on every `pnpm run sync`, so an edit made here is overwritten by the next run.

To change the page, change the doc comment in the binding's Rust source, then regenerate the declarations with `mise run dts`. `mise run dts:check` fails when the committed file no longer matches the source.