---
title: Std.Process
---

Low-level process control: exiting the VM and catching panics.

## Types

### SignalKind

```saga
type SignalKind =
  | SigHup
  | SigQuit
  | SigAbrt
  | SigAlrm
  | SigTerm
  | SigUsr1
  | SigUsr2
  | SigChld
  | SigTstp
```

OS signals that can be observed via the Signal effect.
Note: SIGINT (Ctrl-C) and SIGKILL are not in this list — SIGINT is claimed
by the BEAM break handler and SIGKILL is uncatchable at the OS level.
For graceful shutdown, send SIGTERM (e.g. `kill -TERM <pid>`).

## Effects

### Signal

```saga
effect Signal {
  fun await_signal : (kind: SignalKind) -> Unit
}
```

Signal effect: blocks the calling process until the given OS signal arrives.

## Handlers

### beam_signal

```saga
handler beam_signal for Signal
```

Native handler for the Signal effect.

## Functions

### exit

```saga
fun exit : (code: Int) -> a
```

Immediately terminates the VM with the given exit code.
This is equivalent to erlang:halt/1.

### shutdown

```saga
fun shutdown : (code: Int) -> a
```

Gracefully shuts down the VM with the given exit code.
Flushes IO, runs shutdown procedures, then terminates.
This is equivalent to init:stop/1.

### catch_panic

```saga
fun catch_panic : (f: Unit -> a needs {..e}) -> Result a String needs {..e}
```

Run a function and recover if it panics.
Returns Ok(value) on success, Err(message) if the function panicked.
Panics still crash the program by default — this is an opt-in recovery boundary.

