jdx/mise · error

error running {}: terminated by signal {}

Error message

error running {}: terminated by signal
{}

What it means

Same code path as the exit-code variant: when the asdf plugin's list-all script is killed by a signal (status.code() is None), mise reports 'error running <script>: terminated by signal' with the captured stderr. This indicates the script was aborted abnormally rather than exiting with an error code.

Source

Thrown at src/plugins/asdf_plugin.rs:133

            Settings::get().fetch_remote_versions_timeout(),
        )
        .wrap_err_with(|| {
            let script = script_man.get_script_path(&Script::ListAll);
            eyre!("Failed to run {}", display_path(script))
        })?;
        let stdout = String::from_utf8(result.stdout).unwrap();
        let stderr = String::from_utf8(result.stderr).unwrap().trim().to_string();

        let display_stderr = || {
            if !stderr.is_empty() {
                eprintln!("{stderr}");
            }
        };
        if !result.status.success() {
            let s = Script::ListAll;
            match result.status.code() {
                Some(code) => bail!("error running {}: exited with code {}\n{}", s, code, stderr),
                None => bail!("error running {}: terminated by signal\n{}", s, stderr),
            };
        } else if Settings::get().verbose {
            display_stderr();
        }

        Ok(stdout
            .split_whitespace()
            .map(|v| regex!(r"^v(\d+)").replace(v, "$1").to_string())
            .collect())
    }
    pub(crate) fn fetch_latest_stable(
        &self,
        script_man: &ScriptManager,
    ) -> eyre::Result<Option<String>> {
        let latest_stable = script_man.read(&Script::LatestStable)?.trim().to_string();
        Ok(if latest_stable.is_empty() {
            None
        } else {

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Check dmesg/journalctl for OOM kills and rerun with more memory or fewer concurrent operations.
  2. Reinstall the plugin (`mise plugin remove <name> && mise plugin add <name>`) to rule out a corrupted script.
  3. Run `mise ls-remote <plugin>` alone with MISE_DEBUG=1 to reproduce and capture the signal context.
  4. Inspect the plugin's list-all script for helpers that may crash (e.g. compiled binaries).
Defensive patterns

Strategy: retry

Try / catch

// detect signal termination and retry with backoff / fewer concurrency
try {
  execSync('mise install erlang');
} catch (e) {
  if (/terminated by signal/.test(String(e.stderr))) {
    await sleep(2000);
    execSync('mise install erlang'); // e.g. after fixing OOM pressure
  }
}

Prevention

When it happens

Trigger: The plugin's bin/list-all process was killed — e.g. SIGKILL from the OOM killer, SIGTERM from a timeout/CI job cancellation, or SIGSEGV in a helper invoked by the script.

Common situations: Memory-constrained CI runners OOM-killing list-all; mise process managers or watchers terminating long-running plugin scripts; corrupted plugin scripts triggering crashes.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/8f267db1f358040d. Report an issue: GitHub.