Files
runcmd/examples/error_handling.v
2025-12-28 20:42:30 +03:00

45 lines
1.4 KiB
V

import os
import runcmd
fn main() {
// Prepare the command.
mut cmd := runcmd.new('sh', '-c', 'echo -n This command always fails! >&2; sleep 30; false')
// Run this example with `-d runcmd_trace` to see debug logs.
// Look for line like this: runcmd[pid=584015]: Process.wait: wait for pid 584016
// Try to `kill -9 ${pid_here}` while program runs and see whats happen.
// Run command with capturing its output.
out := cmd.output() or {
if err is runcmd.ExitError {
// Command exited with non-zero code. Handle it here.
eprintln(err)
// `err.state` can tell you the failure details.
eprintln(err.state)
// Let's check if the process was killed by someone...
status := runcmd.WaitStatus(err.state.sys())
if status.term_signal() == int(os.Signal.kill) {
eprintln('Oh, process is killed... ( x__x )')
} else {
// Not killed.
}
exit(err.code()) // `err.code()` here contains the command exit status.
} else {
// Another error occurred. Most likely, something went wrong while executing
// the process creation system calls. Check `err.code()` to get the concrete
// error, it contains the standard C errno value.
// See https://www.man7.org/linux/man-pages/man3/errno.3.html
// Replace 0 to actual errno value (real errno never be zero).
if err.code() == 0 {
// Do something here...
}
// Fallback to panic.
panic(err)
}
}
println(out)
}