jdx/mise · error

exited abnormally

Error message

{engine_bin} exited abnormally: {status:?}

What it means

After `mise oci run` launches the container engine, mise checks the exit status. If the engine process terminated without an exit code (killed by a signal, e.g. SIGKILL/SIGSEGV) and was unsuccessful, mise reports the raw ExitStatus instead of an exit code to propagate. Normal non-zero exit codes are forwarded as-is via request_exit, so this error indicates an abnormal termination.

Solutions

  1. Rerun the command; transient kills (OOM) may not recur
  2. Check `dmesg`/journalctl for OOM or signal kills of docker/podman
  3. Increase memory limits or reduce container workload
  4. Verify the engine daemon is healthy (`docker info` / `podman info`)
Defensive patterns

Strategy: retry

Try / catch

mise oci run ... || { rc=$?; if [ $rc -gt 128 ]; then echo "engine killed by signal $((rc-128))"; fi; }

Prevention

When it happens

Trigger: The selected engine binary (docker/podman) is killed by a signal during `mise oci run` — status.code() is None while success() is false.

Common situations: OOM killer terminating a docker daemon mid-run, podman receiving SIGTERM/SIGKILL from the shell or cgroup limits, or a crashed engine binary.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/ed752946a3bf59af. Report an issue: GitHub.

Appendix: source

Thrown at src/cli/oci/run.rs:220

                Ok(out) if out.status.success() => {}
                Ok(out) => {
                    // Don't fail the overall command — just note it; a
                    // failing rmi usually means the image is still in use
                    // (e.g. another concurrent run) or was already deleted.
                    let stderr = String::from_utf8_lossy(&out.stderr);
                    debug!("{engine_bin} rmi {image_ref} failed: {stderr}");
                }
                Err(e) => debug!("failed to spawn {engine_bin} rmi: {e}"),
            }
        }

        let status = run_result?;
        if let Some(code) = status.code() {
            if code != 0 {
                return Err(crate::request_exit(code));
            }
        } else if !status.success() {
            bail!("{engine_bin} exited abnormally: {status:?}");
        }
        Ok(())
    }
}

fn select_engine(requested: Engine) -> Result<Engine> {
    match requested {
        Engine::Podman => {
            if file::which("podman").is_some() {
                Ok(Engine::Podman)
            } else {
                bail!("--engine podman requested but `podman` was not found on PATH")
            }
        }
        Engine::Docker => {
            if file::which("docker").is_none() {
                bail!("--engine docker requested but `docker` was not found on PATH");
            }

View on GitHub (pinned to 533346cc37)