# `Apero.Proc`
[🔗](https://github.com/Lorenzo-SF/apero/blob/3.0.0/lib/apero/proc.ex#L1)

Process and executable utilities for Apero (pure-Elixir subset).

Provides helpers for checking command availability, finding executables,
and VM introspection. All functions are pure Elixir/Erlang — no shell
execution involved.

For shell-based operations (process listing, signalling, logs, lsof,
fuser) see `Trebejo.Proc`.

# `available_commands`

```elixir
@spec available_commands([String.t()]) :: [String.t()]
```

Filters a list of commands to only those available on the system.

# `command_exists?`

```elixir
@spec command_exists?(String.t()) :: boolean()
```

Returns `true` if the given command exists in the system `PATH`.

# `locate_commands`

```elixir
@spec locate_commands([String.t()]) :: %{required(String.t()) =&gt; String.t()}
```

Returns a map of `command => path` for all found commands.

# `os_pid`

```elixir
@spec os_pid() :: non_neg_integer()
```

Returns the OS process ID of the BEAM VM.

# `scheduler_count`

```elixir
@spec scheduler_count() :: non_neg_integer()
```

Returns the number of scheduler threads.

# `vm_memory`

```elixir
@spec vm_memory() :: non_neg_integer()
```

Returns the VM memory usage in bytes.

# `vm_uptime`

```elixir
@spec vm_uptime() :: non_neg_integer()
```

Returns the VM uptime in milliseconds.

# `which`

```elixir
@spec which(String.t()) :: String.t() | nil
```

Returns the full path of a command if found, or `nil`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
