Proceso (std::process)
En esta página
std::process expone el proceso Zolo en ejecución: argumentos de línea de
comandos, PID, directorio de trabajo, ejecución de subprocesos y telemetría de
uso de memoria. Todas las funciones interactúan con el host y no se pueden
ejecutar en el sandbox WASM; usa la CLI de Zolo.
Argumentos, directorio de trabajo y PID
process.argv() devuelve un array con los argumentos (el índice 0 es el
ejecutable o "zolo"). process.cwd() devuelve el directorio actual.
process.pid() y process.ppid() devuelven los IDs del proceso y del proceso
padre:
Imprime argv, cwd, pid y ppid del proceso actual.
// Feature: process.argv / process.cwd / process.pid — process info
// When to use: read command-line arguments, debugging, relative paths.
// parity-normalize: path
// argv[0] is the absolute path of the running binary (differs VM vs compiled
// exe) — collapsed to <PATH>. The remaining lines are booleans and stay
// exact, so a wrong boolean would still diverge.
use std::process
// argv() -> array of arguments (includes the executable name at [0]).
let args = process.argv()
print(args.len() >= 1) // expected: true
print(args[0]) // expected: path of the binary (or "zolo")
// cwd() -> current directory (absolute string).
let dir = process.cwd()
print(dir.len() > 0) // expected: true
// pid() -> ID of the current process.
let pid = process.pid()
print(pid > 0) // expected: true
// ppid() -> ID of the parent process.
let ppid = process.ppid()
print(ppid > 0) // expected: true
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Ejecutar y esperar subprocesos
process.exec(cmd, args?) bloquea hasta que el comando termina y devuelve
{ stdout, stderr, status }. process.spawn(cmd, args?) inicia en segundo
plano y devuelve { pid }; usa process.wait(pid) para recoger el resultado o
process.kill(pid) para terminarlo:
Ejecuta git --version de forma bloqueante y lanza git status en segundo plano.
// Feature: process.exec / process.spawn — run external commands
// When to use: scripts that orchestrate git, ffmpeg, external builders.
use std::process
// exec(cmd, args?) blocks and returns { stdout, stderr, status }.
let result, err = process.exec("git", ["--version"])
if err == nil {
print(result.status) // expected: 0
print(result.stdout.len() > 0) // expected: true
}
// spawn(cmd, args?) starts in the background and returns { pid }.
// Use process.wait(pid) to collect the result, process.kill(pid) to kill.
let proc, e2 = process.spawn("git", ["status"])
if e2 == nil {
print(proc.pid > 0) // expected: true
let out = process.wait(proc.pid)
print(out.status >= 0) // expected: true
}
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Uptime, memoria y salida
process.uptime() devuelve los segundos transcurridos desde el inicio del
proceso. process.memory_usage() proporciona { rss, vsize } en bytes.
process.sleep(ms) pausa el proceso (prefiere io_runtime.sleep_ms cuando hay
otros I/O en vuelo). process.exit(code) termina inmediatamente ejecutando los
hooks on shutdown:
Demuestra uptime, memory_usage y sleep; exit está comentado para no interrumpir.
// Feature: process.exit / process.sleep / process.uptime / process.memory_usage
// When to use: scheduled shutdowns, daemons, telemetry.
use std::process
// uptime() -> seconds (float) since the process started.
let up = process.uptime()
print(up >= 0.0) // expected: true
// memory_usage() -> { rss, vsize } in bytes.
let mem = process.memory_usage()
print(mem.rss > 0) // expected: true
// sleep(ms) blocks the process for N ms (see also the `sleep <duration>` keyword).
process.sleep(10)
print("woke up") // expected: woke up
// exit(code) terminates immediately, running `on shutdown` first.
// process.exit(0) — success
// process.exit(1) — error
// (we don't call it here so the example keeps running.)
print("alive until the end") // expected: alive until the end
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Introspección resumida
Un panel compacto con PID, PPID, uptime y uso de memoria en un solo bloque — útil para logs de inicio e informes de salud:
Imprime PID, PPID, uptime y uso de memoria con f-strings.
// Process introspection extras (Slice 1 of lifecycle hooks).
// Companion: specs/lifecycle-hooks.md
// Every value here is inherently per-run: pid/ppid vary, memory is live, and
// uptime is wall-clock (already collapsed by the harness's timing rule). The
// subs below neutralize ONLY the numeric operands, keeping the labels/units
// exact — a missing field or a `nil` still diverges.
// parity-sub: pid:\s+\d+ => pid: <N>
// parity-sub: ppid:\s+\d+ => ppid: <N>
// parity-sub: rss=\d+ => rss=<N>
// parity-sub: vsize=\d+ => vsize=<N>
use std::process
print("pid: {process.pid()}")
print("ppid: {process.ppid()}")
print("uptime: {process.uptime()}s")
let mem = process.memory_usage()
print("memory: rss={mem.rss} bytes, vsize={mem.vsize} bytes")
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Consulta también